std::array


概要

array是C++11新引入的容器类型,与内置数组相比,array是一种更容易使用,更加安全的数组类型,可替代内置数组,作为数组升级版,继承数组最基本特性,同时融入部分容器操作。

定义与初始化

array和数组一样,为固定大小容器类型,定义时即需声明大小与类型。

(1)内置数组初始化为两种:默认初始化和列表初始化

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};显式的初始化数组的前三个元素,剩下的元素默认初始化

数组初始化不能直接使用拷贝和赋值!!!数组的传递只能是遍历的形式拷贝

 

(2)array的初始化:和数组初始化差不多

array<int,10> a;

array<int,10> a={0,1,2,3};

和数组不同的是,array可以使用拷贝和赋值的形式进行初始化

array<int,10> copy=a;//只要保证两者的类型一致即可(包括元素类型和大小)

访问

(1)内置数组的访问:下标、指针、迭代器(和vector、array一样在内存中都是使用连续内存)

使用下标可以随机访问数组的元素,注意不要超出数组范围。标准库中的vectorstringarray对于下标的运算要求下标必须是无符号类型,而数组则没有这个限制。

例如: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语句。

 (2)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替代数组工作。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM