(七)数组的替代品
1.模板类vector
模板类vector类似于string类,也是一种动态数组。定义方法:#include <vector>
vector<int> a;创建了长度为0的vector; int n; cin >> n; vector<double> b(n);创建了长度为n的vector;其中n可以是整型常量,也可以是整型变量。
2.模板类array
vector类的功能比数组强大,但付出的代价是效率稍低。模板类array,它也位于名称空间std中。与数组一样,array对象的长度也是固定的,也使用栈〈静态内存分配),而不是自由存储区,因此其效率与数组相同,但更方便,更安全。
用法:array<double,2> arr ; array<int,5> ai;
注意后面的数量只能是常量。
3.数组,vector和array的区别
首先,注意到无论是数组、vector对象还是 array 对象,都可使用标准数组表示法来访问各个元素。其次,从地址可知,array对象和数组存储在相同的内存区域(即栈)中,而vector对象存储在另一个区域〈自由存储区或堆〉中。第三,注意到可以将一个array对象赋给另一个 array 对象;而对于数组,必须逐元素复制数据。
为了防止超出边界,一种选择是使用成员函数at()。就像可以使用 cin 对象的成员函数getline()一样,您也可以使用vector和array对象的成员函数 at(): a2 . at (1) = 2.3;
中括号表示法和成员函数at()的差别在于,使用 at()时,将在运行期间捕获非法索引,而程序默认将中断。这种额外检查的代价是运行时间更长。
Vector是动态数组的替代品,而array是定长数组的替代品。注意array是c++11定义的,需要包含头文件<array>,使用g++编译的时候要用命令g++ -std=c++0x file.cpp。
网友评论