STL-array

简介

C++11中,STL提供了一个新的容器 array,在某些程度上替代了 vector 的作用

array 是封装固定大小数组的容器, 相比于普通数组,他更安全且效率也没有损失

array是序列式容器

类模板

1
2
3
4
template<
class T, //数据类型
std::size_t N //长度
> struct array;

成员函数

迭代器相关

  1. begin() - 返回指向 array 个元素的迭代器
  2. end() - 返回指向 array 中最后一个元素之后的理论元素的迭代器
  3. rbegin() - 返回指向 array 中最后一个元素的反向迭代器(反向开始)
  4. rend() – 返回一个反向迭代器,指向 array 中第一个元素之前的理论元素
  5. cbegin() - 返回指向 array 中第一个元素的const迭代器
  6. cend() - 返回一个const迭代器,指向 array 中最后一个元素之后的理论元素
  7. crbegin() – 返回指向 array 中最后一个元素的const反向迭代器(反向开始)
  8. crend() - 返回指向 array 中第一个元素之前的理论元素的const反向迭代器

容量相关

  1. size() - 返回 array 中元素数 O(1)
  2. max_size() - 返回 array 可以容纳的最大元素数 O(1)
  3. empty() - 当前 array 是否为空 O(1)

元素访问相关

  1. [g] - 返回对 array 位置 g 处的引用 O(1)
  2. at(g) - 返回对 array 位置 g 处的引用,同时进行越界检查 O(1)
  3. front() - 返回对 array 中第一个元素的引用 O(1)
  4. back() - 返回对 array 中最后一个元素的引用 O(1)
  5. data() - 返回 array 底层数组的指针 O(1)

修改器相关

  1. fill() - 以指定值填充 array
  2. swap() - 交换内容
  3. assgin() - 用新的容器替换此容器

array迭代器详解

array 的所有迭代器都是随机访问迭代器

1. 正向迭代器

此迭代器是由 begin(), end() 所返回的,其对其的操作为正向,且当 array 元素不为 const 时可以更改其指向的值,即:

1
2
3
4
array<int, 6> v{ 1,2,3,4,5,6 };
auto i = v.begin(); //*i为1
i += 2; //*i为3
*i = 100; //*i为100

2. 反向迭代器

此迭代器由 rbegin(), rend() 所返回,对其的操作为反向,且也满足当 array 元素不为 const时可以更改其指向的值,即:

1
2
3
4
array<int, 6> v{ 1,2,3,4,5,6 };
auto i = v.rbegin();//*i为6
i += 2; //*i为4
*i = 100; //*i为100

3. const迭代器

此迭代器由 cbegin(), cend(), crbegin(), crend() 返回,只能对其操作,不能更改其指向的值,即:

1
2
3
4
array<int, 6> v{ 1,2,3,4,5,6 };
auto i = v.cbegin();//*i为1
i += 2; //*i为3
*i = 100; //error!

array的能力

如果你需要一个有固定元素量的序列,array 将带来最佳性能,因为内存被分配于栈中