vector | 可变大变小数组。支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢 |
deque | 双端队列。支持快速随机的访问,在头尾位置插入/删除速度很快 |
list | 双向链表。只支持双向顺序访问,在list中任何位置进行插入/删除操作速度都很快 |
forward_list | 单向链表。只支持单向顺序访问,在链表任何位置进行插入/删除操作速度都很快 |
array | 固定大小数组。支持快读随机访问。不能添加或删除元素 |
string | 与vector相似的容器。但专门用于保存字符。随机访问快,在尾部插入/删除速度很快 |
string和vector将元素保存在连续的内存空间中,进行插入/删除操作后,需要移动插入/删除位置之后的左右元素,来保持连续存储。
当将一个容器初始化为另一个容器的拷贝时,两个容器的容器类型和元素类型都必须相同
list
vector
list
list
vector
//ture (array除外)拷贝由一个迭代器对指定的元素范围,不要求容器类型和元素类型相同
fowared_list
int age[5] = {0,1,2,3,4};
int cpy[5] = age; //false 内置数组不支持拷贝或赋值
array
array
调用emplace_front、emplace和emplace_back等成员函数时,则是将参数传递给元素类型的构造函数,emplace成员使用这些参数再容器管理的内存中直接构造元素。而调用push或insert成员函数,是将元素类型的对象传递给他们,这些对象被拷贝到容器中。
如果容器是一个const对象,返回值是const的引用。如果容器不是const的,则返回值是普通引用,可以改变元素的值。
三个顺序容器适配器:stack、queue和priority_queue
默认情况下,stack和queue是基于deque实现的,priority_queue是在vector之上实现的