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());