STL之array
- 头文件及声明:1 
 2
 3
 4
 5
 6
 7
 8
 namespace std
 {
 template <typename T, size_t N>
 class array;
 }
- 初始化: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- /* 
 使用默认构造函数初始化,对于内部类型来说值是一个不确定的值。如下:arr中的值均无法确定。
 */
 std::array<int, 4> arr;
 /*
 我们可以给构造函数传一个空的初始化列表,这样可以保证容器内的值被初始化,内部类型初始化为0。若是初始化列表里面的数不够,剩下 的也会被初始化为0,若是数多于指定的数,则会报错,对于无法确定有多少个数字的时候我们可以不指定N的大小。
 */
 std::array<int, 4> arr1 = { };
 std::array<int, 4> arr2 = { 1, 2 };//剩下的值初始化为0
 std::array<int, 4> arr3 = { 1, 2, 3, 4, 5 };//错误,值太多
 std::array<int> arr4 = { 1, 2, 3, 4 };
- size - 1 
 2
 3- /* 
 可以定义一个N为0的数组,相关迭代器都可以使用,但是front()和back()无法使用
 */
- array的创建,拷贝与销毁
- 无修改的操作
c.empty()
c.size()
c.max_size() 返回最大能够存储的值的数目
c1 op c2 各种比较的操作
- 赋值操作
c = c2
c = rv
c.fill(val)  所有的元素都用val初始化
c1.swap(c2)
swap(c1, c2) 注意此处的时间复杂度并非常数时间,而是线性
- 元素的存取
c[idx]
c.at(idx)
c.front()
c.back()
注意这里面仅仅c.at(idx)会检查是否越界并抛出异常,其他的属于未定义的行为。
- 迭代器
array是存储在一片连续的内存中间,因此可以像c数组一样使用,data()函数返回一个指向这片区域的指针。如下所示:1
2
3std::array<char, 100> a;
strcpy(a.data(), "hello world");
printf("%s\n", a.data());