顺序容器,它将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。标准库里定义了三种类型:vector(支持 快速随机访问)、list(支持快速插入、删除)、deque(双端队列)容器只定义了少量操作,大多数额外的操作由算法库提供。容器内元素的类型约 束;1、元素类型必须支持赋值运算;2、元素类型的对象必须可以复制。这是容器元素类型的最低要求,如果想支持一些其他特殊要求,则必须具备相关的性质。
可以定义容器的容器vector< vector<int> > lines;//必须使用"> >"中间的空格,否则会出现变异错误
迭代器运算:
关系操作符只适用于vector和deque容器,它们可以根据元素位置直接有效地访问指定的容器元素。而list容器的迭代器既不支持算术运 算(加法或者减法),也不支持关系运算(<=,<,>=,>),它只提供前置和后置的自增、自减运算以及相等(不等)运算。
迭代器范围:
c++使用一对迭代器标记迭代器范围,通常命名为first和last或beg和end。该范围内的元素包括迭代器first指向的元素,以及从first开始一直到迭代器last指向的位置之前的所有元素,此类元素范围称为左闭合区间[first,last)。
顺序容器的操作:
在容器中添加元素;在容器中删除元素;设置容器大小;获取容器内的第一个和最后一个元素。对于begin()、end()、rbegin()、 rend()四个操作,均有const版本。如果容器时const,则其返回类型要加上const_前缀。c.push_back(t) 在容器c的尾部添加值为t的元素,返回void类型。c.push_front(t) 在容器c的前端添加值为t的元素,返回void类型。但是只有list和deque具有这样的性质。
//容器的顺序遍历vector<int>::reverse_iterator iterReverse=vect.rbegin();//定义反向迭代器while(iterReverse!=vect.rend()){
cout<<iterReverse<<endl; iterReverse++;
}
vector<int>::iterator iter = vect.begin();//定义正向迭代器while(iter!=vect.end())
{
cout<<iter<<endl; iter++;
}
在容器中的指定位置添加元素:使用insert函数:由于迭代器可能指向超出容器末端的下一位置没这事一个不存在的元素,因此insert函数是在其指向位置之前而非其后插入元素。mylist.insert(iter,element);
/获取中心位置迭代器,需要注意的list不允许如下的迭代器的加法
vector<int>::iterator middle=vectCpy.begin()+vect.size()/2;
vectCpy.insert(middle,1001);//在中间位置添加一个元素
vectCpy.insert(vectCpy.begin(),10,9);//在第一个元素后面添加10个初值为9的元素
int num[3]={555,666,777};
vectCpy.insert(vectCpy.end(),num,num+3);//在vectCpy后面加入一段来自num数组里的元素
vectCpy.insert(vectCpy.end(),vect.begin(),vect.end());//在vectCpy后加入一段来自迭代器对间的元素
添加元素可能会导致某些或全部迭代器失效,假设所有迭代器失效是最安全的做法。不要存储end操作返回的迭代器,为了避免存储end迭代器,可以在每次做完插入运算重新计算end迭代器值。