c++入门之内置数组和array比较
array是C++11中新提出来的容器类型,与内置数组相比,array是一种更容易使用,更加安全的数组类型,可以用来替代内置数组。作为数组的升级版,继承了数组最基本的特性,也融入了很多容器操作,下面介绍array和内置数组。
array和数组一样,是一种固定大小的容器类型,在定义的时候就要声明大小和类型。
定义和初始化:
数组的初始化有两种:默认初始化和列表初始化
int arr[10]; //10个值为0的int型整数
int arr[5]={1,2,3,4,5};
int arr[]={1,2,3};//维度为3 的数组,显式的列出所有元素
int arr[5]={1,2,3};显式的初始化数组的前三个元素,剩下的元素默认初始化
数组初始化不能直接使用拷贝和赋值!!!数组的传递只能是遍历的形式来拷贝
array的初始化:和数组初始化差不多
array<int,10> ial;
array<int,10> ial1={0,1,2,3};
和数组不同的是,array可以使用拷贝和赋值的形式进行初始化
array<int,10> copy=ial1;//只要保证两者的类型一致就可以(包括元素类型和大小)
使用方式:
数组的访问:下标、指针、迭代器(和vector、array一样在内存中都是使用连续内存)
使用下标可以随机访问数组的元素,注意不要超出数组合理的范围。标准库中的vector、string和array对于下标的运算要求下标必须是无符号类型,而数组则没有这个限制。
例如:int *p=&arr[2];//p指向数组的第三个元素,指针的起点是在第三个元素
int j=p[1];//p[1]等价于*(p+1),也就是arr[3]
int i=p[-2];//等价于*(p-2),也就是arr[0]
只要保证指针运算后还在数组的范围内即可
数组名其实就是指向第一个元素的指针
int *p=arr;或者int *p=&arr[0];都是可以的,或者直接就用数组名作为指针进行运算。
在c++11中给数组提供了更加安全的访问方式,类似于迭代器的操作,但是数组不是类类型,并没有成员函数,新标准中引入了begin()和end()函数
int *beg=begin(arr);//指向首元素
int *last=end(arr);//指向尾元素的下一个
同理,如果要是遍历数组,同样可以使用范围for语句。
array的使用
array与数组最大的区别是array是一种容器类型,它支持一系列容器操作,但是它和数组更接近,很多通用的容器操作它却不支持,因此在这里和数组来比较。
下面从容器的角度来看array的区别
1.不支持局部拷贝
例如不允许C c(b, e);//将迭代器b和e之间的元素拷贝到c
不允许用C1={a,b,c...};用列表中的元素替换C1
2.不允许添加或删除元素,因为array是固定大小的。
相比于数组,array可以使用成员函数。其中包括:
1.可以使用拷贝和赋值,只要保证类型一致即可
2.使用swap函数,a.swap(b);或者swap(a,b);交换两者的元素
3.使用正向和反向迭代器
array是数组的升级版,将数组正式纳入到容器的范畴。array在使用和性能上都要强于内置数组,对于一些固定大小的使用场景,可以用array来替代原先数组的工作。
---------------------
作者:微燃
来源:CSDN
原文:https://blog.csdn.net/u011405218/article/details/70653323?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
c++入门之内置数组和array比较的更多相关文章
- js入门之内置数组对象 Array
一. 数组 1. 创建数组的两种方式 1. 数组字面量 var array = [] 2. 数组的构造函数创建数组 var array = new Array(); 2. 如何判断一个变量是否是数组 ...
- js入门之内置对象Math
一. 复习数据类型 简单数据类型, 基本数据类型/值类型 Number String Boolean Null Undefined 复杂数据类型 引用类型 Object 数组 数据在内存中是如何存储的 ...
- js入门之内置对象Date
一. Date对象 Math和Date对象的区别 Math对象和Date对象的区别 Math不是一个构造函数,里面提供的是静态成员 Date是一个构造函数 首先要通过new Date() 来创建日期实 ...
- Swift入门(五)——数组(Array)
集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,各自是数组(Array)和字典(Dictionary). 他们的主要差别在于数组中的元素由下标确定.而字典中的数据的值由数据的键(K ...
- GoLang基础数据类型--->数组(array)详解
GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...
- java基础-引用数据类型之一维数组(Array)
java基础-引用数据类型之一维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的定义 1>.为什么需要数组 保存一个数据可以定义一个变量,如果要保 ...
- OpenGL中glVertex、显示列表(glCallList)、顶点数组(Vertex array)、VBO及VAO区别
OpenGL中glVertex.显示列表(glCallList).顶点数组(Vertex array).VBO及VAO区别 1.glVertex 最原始的设置顶点方法,在glBegin和glEnd之间 ...
- 后缀数组(suffix array)
参考: Suffix array - Wiki 后缀数组(suffix array)详解 6.3 Suffix Arrays - 算法红宝书 Suffix Array 后缀数组 基本概念 应用:字 ...
- 数组(Array),二维数组,三维数组
数组(Array):相同类型数据的集合就叫做数组. (一)定义数组的方法: A) type[] 变量名 = new type[数组中元素的个数] 例如: int[] a = new int[10] ; ...
随机推荐
- 反射生成 INSERT 多个对象的 SQL 语句(批量插入)
+ View code private static void insertObject(List<?> objectList) throws IllegalAccessException ...
- mysql性能排查思路
mysql性能瓶颈排查 top/free/vmstat/sar/mpstat 查看mysqld进程的cpu消耗占比 确认mysql进程的cpu消耗是%user, 还是sys%高 确认是否是物理内存 ...
- python爬虫起步...开发环境搭建,最简单的方式
研究一门编程语言,一般第一步就是配置安装部署相关的编程环境.我认为啊,在学习的初期,大家不是十分了解相关的环境,或者是jar包,python模块等的相关内容,就不需要花费大量的时间去研究如何去安装它. ...
- python中装饰器的原理
装饰器这玩意挺有用,当时感觉各种绕,现在终于绕明白了,俺滴个大爷,还是要慢慢思考才能买明白各种的真谛,没事就来绕一绕 def outer(func): def inner(): print(" ...
- Python3中操作字符串str必须记住的几个方法
几个Python的字符串常用内建函数 1.方法:Python3 isdigit()方法 描述:Python isdigit() 方法检测字符串是否只由数字组成. 语法:str.isdigit() 参数 ...
- SQL Server数据类型int、bigint、smallint、tinyint对比表
SQL Server数据类型int.bigint.smallint.tinyint对比表 数据类型 范围 存储 bigint -2^63 (-9,223,372,036,854,775,808) 到 ...
- C# -- 索引器、枚举类型
C# -- 索引器.枚举类型 索引器允许类或结构的实例就像数组一样进行索引. 无需显式指定类型或实例成员,即可设置或检索索引值. 索引器类似于属性,不同之处在于它们的访问器需要使用参数. 1. 索引器 ...
- VMare Workstation 安装Ubuntu 虚拟机教程
1.VMware Workstation,选择左上角文件—新建虚拟机,开始新建一台虚拟机,典型的话许多配置为默认设置,因此,这里我选择自定义安装: 2.机硬件兼容性选择默认即可: 3.客户操作系统选择 ...
- Spark Streaming和Kafka整合保证数据零丢失
当我们正确地部署好Spark Streaming,我们就可以使用Spark Streaming提供的零数据丢失机制.为了体验这个关键的特性,你需要满足以下几个先决条件: 1.输入的数据来自可靠的数据源 ...
- MySQL高级知识(十五)——主从复制
前言:本章主要讲解MySQL主从复制的操作步骤.由于环境限制,主机使用Windows环境,从机使用用Linux环境.另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查 ...