1、vector
和数组类似,不同的是vector是动态扩展的。
注意:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间,!!所以每次扩展vector容器的首地址会改变。
实现插入和删除功能要迭代器!!
2、deque
双端数组,可以对头端进行插入删除操作
deque与vector区别:
- vector对于头部的插入删除效率低,数据量越大,效率越低
- deque相对而言,对头部的插入删除速度回比vector快
- vector访问元素时的速度会比deque快,这和两者内部实现有关
3、stack
概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口
栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为
4、queue
概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口
队列容器允许从一端新增元素,从另一端移除元素
队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为
5、list
list是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。
链表的组成:链表由一系列结点组成。
结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域
STL中的链表是一个双向循环链表。
由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。
List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。
6、set和multiset
!!只能用insert插入数据,没有尾插。
作用:所有元素都会在插入时自动被排序
set和multiset区别:
set不允许容器中有重复的元素
multiset允许容器中有重复的元素
7、、map和multimap
map的传入的是对组即map<T,T>p;用pair<T,T>来赋值。
第一个T是key值,第二个T是value值
map默认的是按照key值从小到大排序