1. vector
vector 封装了数组 ,是有序的。在内存中是一块连续的内存空间进行存储。但是不支持用户指定空间大小。系统首先分配一个非常大的内存空间进行预备存储,当超过此分配的空间时在进行整体重新分配一块内存空间存储。这就让人感觉可以不指定vector即一个连续内存大小的感觉。通常默认非配的控件能够完成大部分存储的。
优点:
1. 随机访问元素快,支持[]下标与at()访问。
2. 节省空间
缺点:
1. 在头部插入、删除特别慢;在尾部插入、删除比较快;在内部插入、删除比较慢。
2. 当动态添加的数据超过默认分配的大小时,要进行整体的重新分配拷贝与释放。
3. 存储空间有限,必须是连续的空间
2. list
list 封装了链表,是有序的。 不过在内存中不是连续的内存存储,不支持[]。每一个结点都包括一个信息块、一个前驱指针、一个后驱指针。可以不分配必须的内存大小就可以方便的进行添加和删除。
优点:
1. 不使用连续的内存进行存储,存储空间无限(只要内存够)。
2. 在内部插入、删除很快(不需要进行内存拷贝或者移动,只需要进行指针的更改)
缺点:
1. 随机查找太慢
2. 相比vector 占用内存比较大
3. set、map
set 、map 属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树。 他们的插入、删除效率比其他序列容器高,因为不需要做内存拷贝或者移动,而是直接指向结点指针。内存中存储不连续。包含的key值不能包含相同的;占用空间比较大;
区别:
1. set 只有一个key值,map是一个键值对key+value
2. 效率都很高