介绍
array
是一个封装普通数组的顺序容器,其数组大小固定,可以使用索引位置访问元素,受限地在尾部插入和删除元素,但是受限地在中部插入或删除元素是比较麻烦的 (受限指的是可能因为数组大小原因,导致操作失败)。
array
定义于头文件 <array>
,其声明如下:
template<
class T,
std::size_t N
> struct array;
array
顺序容器是一个聚合体,而非一个类。
有两种类型的对象被称为聚合体:
- 数组类型
- 满足下列条件的类类型 (通常是结构体或者联合体):
- 没有私有或保护的非静态数据成员
- 没有用户提供的构造函数
- 没有基类
- 没有虚函数
初始化
-
array<T,N> arr;
创建一个数组大小为 N,数组元素类型为 T,数组元素被预初始化 (或者称为聚合初始化) 的array
容器。array<int,4> arr;
-
array<T,N> arr = {num1,num2,……};
创建一个数组大小为 N,数组元素类型为 T,数组元素被初始化为 num1、num2……的array
容器。array<int,4> arr = {0,1};
不能这样初始化
array
:array<T,N> arr({0,1});
,原因在于array
容器并没有提供针对初值列而写的构造函数。 -
array<T,N> arr(arr1);
创建一个 arr1 的同型拷贝 (所有元素都被复制)。array<int,4> arr1 = {0,1}; array<int,4> arr(arr1);
-
array<T,N> arr = arr1;
创建一个 arr1 的同型拷贝 (所有元素都被复制)。array<int,4> arr1 = {0,1}; array<int,4> arr = arr1;
修改
访问 array
中元素,有以下几种方式:
at(index)
返回索引位置所指元素的引用。如果访问越界,抛出异常。cout << arr.at(0) << endl;
operator[index]
返回索引位置所指元素的引用。不对访问是否越界进行检查。cout << arr[0] << endl;
front()
返回array
第一个元素的引用。cout << arr.front() << endl;
back()
返回array
最后一个元素的引用。cout << arr.back() << endl;
data()
返回array
底层数组的指针。int* num = arr.data(); cout << num[0] << endl;
- 迭代器
array<int,4>::iterator ite = arr.begin(); for (;ite != arr.end(); ++ite) { cout << *ite << " "; }
以上 6 种访问方式都可以实现修改。
其余修改方法不常用,因此放弃列举。
查询
empty()
判断array
容器是否为空。size()
返回array
容器中元素个数,其值为 N。max_size()
返回array
容器可容纳的最大元素数,由于array
容器大小固定,因此其值为 N。
比较
按照字典序列比较 array
中的值。
- operator ==
- operator !=
- operator <
- operator <=
- operator >
- operator >=
if(arr == arr1)
{
cout << "arr == arr1" << endl;
}
增加
没有实现。
删除
没有实现。