1. Vector不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。
vector<int> ivec; //ivec holds objects of type int
vector<Sales_item> Sales_vec; //holds Sales_items
2. vector对象的定义和初始化
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. 关键概念:vector的动态增长
虽然可以对给定元素个数的vector对象预先分配内存,但更有效的方法是先初始化一个空vector对象,然后再动态地增加元素。
4. vector对象的操作
v.empty() 如果v为空,返回true,否则返回false
v.szie() 返回v中元素的个数
v.push_back(t) 在v的末尾增加一个值为t的元素
v[n] 返回v中位置为n的元素
v1 = v2 把v1的元素替换为v2中元素的副本
v1 == v2 如果v1和v2相等,返回true
!=, <, <=, >, >=
5. vector的下标操作
for(vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)
{
ivec[ix] = 0;
}
注:由于vector的动态增长,所以倾向于在每次循环测试size的当前值,而不是在进入循环前,存储size值的副本。
6. 下标操作的注意点
下标操作只能获取已存在的元素。
仅能对确知已存在的元素进行下标操作,试图获取不存在的元素必然产生运行时错误
7. 迭代器(iterator)
1). 迭代器是一种检查容器内元素并遍历元素的数据类型,标准库为每一种标准容器定义了一种迭代器类型。
2). 定义: vector<int> iterator iter;
3). begin和end操作
每个容器都定义了一对命名为begin和end的函数,用于返回迭代器
begin返回的迭代器指向第一个元素
end返回的迭代器指向vector的“末端元素的下一个”,通常称为超出末端迭代器,表明它指向了一个不存在的元素
如果vector为空,begin返回的迭代器与end返回的迭代器相同。
4). 迭代器解运算
*操作符 返回迭代器所指向的元素
5). const_iterator 只能读取容器内元素,但不能改变其值