1 调用头文件
vector是一个类模板不是数据类型,但可以定义多种数据类型,vector <类型> 指定其保存元素的类型,如vector <int>是数据类型。
使用如下方式调用
#include <vector>
using std::vector;
2 申明(尖括号描述指定类型)
vector<int> ivec;
vector<Sales_item> Sales_vec; Sales_item为自定义类型
3 定义和初始化
3.1 基本模版
vector<T> v1; vector保存类型为T的对象。默认构造函数,v1为空。
vector<T> v2(v1); v2是v1的一个副本
vector<T> v3(n, i); v3中包含n个值为i的元素
vector<T> v4(n); v4中函数n个副本(值被默认初始化)
3.2 初始化和默认初始化
vector <int> (10, -1) 10个int元素,每个均是-1
vector <string> (10, "hi") 10个string元素,每个均是hi
vector <int> (10) 10个int元素,默认初始化为0
vector <string> (10) 10个string元素,默认初始化为空
vector <string> str(10, null); 报错
vector <string> str(10, "null"); 将字符串null复制给str
vector < vector <int> > val(10); 编译报错,vector <int>不能作为vector的类型
vector的对象可动态增加,增加效率高,当元素值已知时,最好通过动态添加元素让其增加,而非向C或者JAVA提供分配好(具体原因见第九章)
3.3 注意事项
(1)若创建非空的vector对象,则必须给出初始化的值
vector<int> ivec; 空的vector
cout << ivec[0] 运行报错(段错误),因为ivec未被初始化,不知道具体大小 (应为vector<int> ivec(3); )
vector <int> val; cout << val << endl; 编译报错,未定义val的位置
(2)两个对象复制时,两个对象类型需一致
vector<int> ivec1;
vector<int> ivec2(ivec1); 正确
vector<string> ivec3(ivec1); 报错
4 操作
4.1 基本模板
v.empty() 如果v为空,则返回true,否则返回false
v.size() 返回v中的元素个数
v.push_back(t) 在v的末尾增加一个值为t的元素
v[n] 返回v中位置为n的元素
v1 = v2 把v1的元素替换为v2中元素的副本
v1 == v2 如果v1与v2相等,则返回true
!=, <, <=, >, >= 保持这些操作符惯有的含义
4.2 注意事项
(1) 成员函数size返回的响应vector类定义size_type的值
使用size_type类型时,必须指出该类型在哪里定义的。vector类型总是包含vector的元素类型
vector<int>::size_type 正确
vector::size_type 错误
(2)循环增加函数直到循环结束(ctrl+d)
string word;
vector <string> str;
while (cin >> word)
{
str.push_back(word);
cout << word << endl;
}
[root@iZwz9a9kyixoqvys89ewj4Z vector]# ./a.out
aaa bbb ccc
aaa
bbb
ccc
(3)下标操作
for(vector<int>::size_type ix=0; ix != ivec.size(); ++ix)
{
ivec[ix] = 0;
}
ivec.size() 不应该像C或者JAVA编程在循环之外初始化,因为C++的vector是可变的 (size函数一般定义成内联函数-提供效率)
C++习惯优先 !=而不是<进行循环条件的判断