容器:存储数据的模板(数据结构)。常用的容器有以下几个:
string:字符串容器。使用增删改查操作,比C语言更方便。
vector:线性结构,相当于动态数组。array在申请内存空间时都会申请的稍微大一些,太大了会浪费内存,太小了新数据进来又容易不够用。而vector正好解决了这个问题,当有新的数据进来,空间不够用时,系统会自动开辟一块新的空间将数据装到里面,再释放原有空间,vector容器的容量一定是大于等于数据个数的。
存储数据的方式是随机存储,所以迭代器访问也是随机访问。
deque:线性结构,双端队列,两头都可以进出,更大的自由度带来的可能是更大的消耗。
deque是由一块一块的空间拼接起来的。优点是不用重新开辟空间,复制数据,释放原有空间这一系列操作。
存储方式随机,迭代器访问方式也是随机访问。
stack:堆栈,先进后出。没有迭代器。
queue:队列,先进先出。没有迭代器。
list:链表。通过指针连接,在物理存储空间上可以是无序的,相较于vector,list增删改查只需要修改指针和单个数据即可,不用移动大量元素,也避免了占用内存。
链表是双向结构,所以迭代器是双向迭代器。
set/multiset:底层由红黑树实现,属于关联容器。不区分键值和实值,整个数据就是一个键值,数据进来会根据键值被自动排序。set和multiset的区别是multiset允许键值重复。双向迭代器。
map/multimap:底层由红黑树实现,同属于关联容器。将数据分为键值和实值,同样按键值自动排序。map和multimap的区别是multimap允许键值重复。双向迭代器。