1、容器元素类型
C++中大多数数据类型可以作为容器的元素类型。容器元素类型必须满足一下两个条件:支持赋值和复制操作。
所以没有元素是引用类型的容器,同时IO对象和auto_ptr也不能作为容器的元素类型。
2、vector容器的自增长
vector容器中存储的元素在内存中是连续存储的。假如容器中没有空间容纳新元素,此时由于元素必须连续存储以便索引访问,所以不能在内存中随便找个地方存储这个新的元素,于是vector必须重新分配空间,用于存放原来的元素和新添加的元素:存放在旧容器中的元素被复制到新的容器中,接着插入新的元素,最后撤销旧的存储空间。为了使vector容器实现快速的内存分配,其实际分配的容量要比当前所需的空间多一些,vector容器预留这些空间,用于存放新的元素。
list容器中添加元素时,只需要创建一个新的元素,然后将该元素连接到已经存在的链表中,不需要重新分配存储空间,也不用复制任何已存在的元素。
3、vector、deque、list三种容器的特点
vector:支持快速随机访问、可高效的在vector容器尾部添加删除数据
deque:支持快速随机访问、可高效的在deque容器头部和尾部添加删除数据
list:支持顺序访问,但是在任何位置插入删除元素都很快
4、vector容器基本操作
注意(不使用erase和clear时)vector容器的删除。
#include "stdafx.h"
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
//vector定义并初始化
vector<int> v1;
for (int i=0;i<10;i++)
v1.push_back(i+1);
//使用迭代器遍历vector
vector<int>::iterator iter=v1.begin();
for (;iter!=v1.end();iter++)
{
cout<<*iter<<" ";
}
cout<<endl;
//使用iterator删除整个vector
for (iter=v1.begin();iter!=v1.end();)
{
iter=v1.erase(iter);
}
//再访问vector中的元素,就得不到结果了
for (iter=v1.begin();iter!=v1.end();)
{
cout<<*iter++<<" ";
}
return 0;
}