57.静态数组std array in C++
std array是一个实际的标准数组类,是C++标准模板库的一部分
array是用来处理静态数组的,这里的静态的意思是不增长的数组,当创建array时就要初始化其大小,并且不能将他容量随后变大变小
🍅array用法
使用静态数组要包含头文件#include <array>
array接受两个模板参数(也可以只选一个类型参数,但99.99%的情况都是两个参数)
💡array<类型, 大小> 名字
#include <array>
int main() {
std::array<int, 5> data;
data[0] = 1;
data[4] = 10;
return 0;
}
(如果这样子看的话,array就是一个模板类)
如果单单这样看,array和C语言风格的原生数组是一模一样的,那么为什么要用它呢?
🍅使用array的目的
1.可以直接知道数组的大小
int main() {
int a[99];
int size = 99;//老数组需要显式的写出来大小,不能访问其大小
std::array<int, 99>b;
b.size(); //array可以直接访问其大小
}
2. 可以使用对应的迭代器进行操作
可以利用迭代器来操作STL算法函数,或者单纯遍历
std::array<int, 3> a = {3, 1, 2};
std::sort(a.begin(), a.end());
for (int temp : array) {
std::cout << temp << std::endl;
}
3.array和原生数组都是创建在栈上的(vector是在堆上创建底层数据储存的)
4.原生数组越界的时候不会报错,而array会有越界检查,会报错提醒
int a[5];
std::cout << a[5];
//系统会照常工作,然后输出-858993460的错误数字,系统完全没意识到数组是访问了它不该访问的地方
//如果是array,就会报错了
- 并不需要担心越界检测会拖慢array的速度,array是相当快的(在栈上)。而当array在最优化情况下,它的速度和普通风格的数组是一样的(正常情况下会慢于普通数组)
🍅Cherno的使用建议
你应该开始到处使用这个std::array,而不是普通的C语言数组,因为它有增加了一层调试(并且它也没有性能成本!),并且它还可以让你记录数组的大小