-
解释
– List:封装了链表,
– Vector:封装了数组,
– Deque:动态将多个连续空间通过指针数组接合在一起,
– Map:含Key和Key所对应的Value,
– Set:不包含重复的数据,只含有Key, -
对比
– Vector使用连续内存存储,支持[],List不支持
– Vector随机访问的速度很快,插入头部元素速度很慢,尾部插入速度很快
– List随机访问速度慢,插入很快(改变指针指向就可以)
– Map与Set使用平衡检索二叉树,插入很快
– Map与Hash_Map区别:Hash_Map使用了Hash算法加快查找过程,但需要更多的内存存放Hash桶元素 -
使用
– Vector
vector<ElemType> c; // 创建一个空的vector
vector<ElemType> c1(c2); // 创建一个vector c1,并用c2去初始化c1
vector<ElemType> c(n) ; // 创建一个含有n个ElemType类型数据的vector;
vector<ElemType> c(n,elem); // 创建一个含有n个ElemType类型数据的vector,并全部初始化为elem;
c.~vector<ElemType>(); // 销毁所有数据,释放资源;
c.at(index); // 返回指定index位置处的元素
c[i]; // 返回指定index位置处的元素
c.begin(); // 返回指向容器最开始位置数据的指针
c.end(); // 返回指向容器最后一个数据单元的指针+1
– Vector内存扩展:
容器已经没有空间容纳新插入的元素,由于vector中的元素是连续存放,所以不能随便找个地方存放,于是vector会重新分配一块大的内存,将原来的数据拷贝过来再将原来的空间释放掉,而这部分内存一般情况下比需要存储的数据所需要的内存大,这样当再有元素需要存储时就不需要在开辟内存了
– List
typedef list<int> LISTINT;
LISTINT listOne;
LISTINT::iterator i;
//从前面向listOne容器中添加数据
listOne.push_front (2);
listOne.push_front (1);
//从后面向listOne容器中添加数据
listOne.push_back (3);
listOne.push_back (4);
for (i = listOne.begin(); i != listOne.end(); ++i)
cout << *i << " ";
cout << endl;
– Map
Map<int, string> mapStudent;
map<int, string>::iterator iter;
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
Cout<<iter->first<<” ”<<iter->second<<end;
}
iter = mapStudent.find(1);
– Set
N/A