持续更新...
vector是一个类模板,vector是模板而非类型。
vector对象初始化
vector<T> v1; //v1是一个空vector,它的的潜在元素是T类型的,执行默认初始化
vector<T> v2(v1); //v2中包含有v1所以元素的副本
vector<T> v3(n,val); //v3包含了n个重复的元素,每个元素的值都是val
vector<T> v4{a,b,c...};//v4包含了初始值个数的元素,每个元素被赋予相应的初始值
C++标准要求vector应该能在运行时高效快速的添加元素,因此一般情况下,更有效的方法是先定义一个空的vector对象,再在运行时向其中添加具体值。
不能用下标形式添加元素
vector对象(以及string对象)的下标运算可用于访问已存在的元素,而不能用于添加元素。
vector<int> ivec; //空vector对象
for (int i = 0; i != 10; i++)
ivec[i] = i; //严重错误:ivec不包含任何元素
//ivec.push_back(i); //正确
vector对象的操作
v.empty() //v为空返回真,否则返回假
v.size() //返回元素个数
v.push_back(t) //向v的尾端添加一个值为t的元素
迭代器
- string对象也支持迭代器
- 如果容器为空,则begin()和end()返回的是同一个迭代器。可利用这个来检测容器是否为空。
if(s.begin()!=s.end()) //确保s非空
{
....
}
- end返回的迭代器并不实际指示着某个值,所以不能对其进行递增或解引用的操作。
- 迭代器类型:iterator和const_iterator,const_iterator和常量指针差不多,能读取但是不能修改它所指向的值。
- cbegin()和cend()返回的迭代器类型都是const_iterator。
- 任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。谨记,但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。