4.10.1 模板类 vector
类似 string 类,也是一种动态数组,可以在运行阶段设置长度。示例:
#include <vector>
std::vector<int> list;
4.10.2 模板类 array(C++11)
类似数组,长度固定,使用栈而不是自由存储区,效率和数组相同但更方便、更安全。示例:
#include <array>
std::array<int, 5> list = {1, 2, 3, 4, 5};
4.10.3 数组、vector、array 区别
联系和区别:
- 都可以使用标准数组表示法访问各元素;
- 从地址上看,数组和array存储在栈中,vector存储在堆中;
- 对于数组,只能逐元素赋值;
示例:
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int main()
{
double a1[4] = {1.2, 2.4, 3.6, 4.8};
vector<double> a2(4);
a2[0] = 1.0 / 3.0;
a2[1] = 1.0 / 5.0;
a2[2] = 1.0 / 7.0;
a2[3] = 1.0 / 9.0;
array<double, 4> a3 = {3.14, 2072, 1.62, 1.41};
array<double, 4> a4 = a3;
a1[-2] = 20.2;
}
注意 a1[-2] = 20.2 这条语句,赋值到数组外面了。C++不检查这种超界错误,这表明数组的行为是不安全的。但是对于 vector、array,可以使用 at() 函数在运行期间捕获非法索引,而程序默认将中断。代价是运行时间更长。此外,使用 begin()、end() 还可以让你能够确定边界。