存储策略会影响特定容器是否支持特定操作:
string和vector:
将元素保存在连续的内存空间中,由于元素是连续的,有元素的下标来计算其地址是非常快的。但是在这两种容器的中间位置添加或删除元素就会非常耗时:在一次插入或删除操作后,需要移动插入/删除位置之后的所有元素,来保持连续存储。而且,添加一个元素有时还需要分配额外的存储空间。这种情况下,每个元素都必须移动到新的存储空间中。
list和forward_list:
这两种容器在任何位置的添加和删除操作都很快速,但是,这两个容器不支持元素的随机访问:为了访问一个元素,只能遍历整个容器。与vector,deque和array相比,这两个容器的额外内存开销也很大。
deque:
与vector和string类似,deque支持快速的随机访问,在中间位置添加或删除元素的代价很高。但是,在deque两端添加或删除元素都是很快的,与list或forward_list添加删除元素的速度一样。
array对象的大小是固定的,因此array不支持添加和删除元素以及改变容器大小的操作。
forwars_list的设计目标是达到与最好的手写的单向链表数据结构相当的性能。因此,没有size的操作,因为保存或计算其大小就会比手写链表多出额外的开销