12、容器小结
1、容器的选用
Vector和deque容器提供了对元素的快速访问,但付出的代价是,在容器的任意位置插入或删除元素,比在容器尾部插入和删除的开销更大,因为要保证其连续存储,需要移动元素;list类型在任何位置都能快速插入和删除,因为不需要保证连续存储,但付出的代价是元素的随机访问开销较大。特征如下:
- 与vector容器一样,在deque容器的中间insert或erase元素效率比较低;
- 不同于vector容器,deque容器提供高效地在其首部实现insert和erase的操作,就像在尾部一样;
- 与vector容器一样而不同于list容器的是,deque容器支持对所有元素的随机访问。
- 在deque容器首部或尾部删除元素则只会使指向被删除元素的迭代器失效。在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器都失效。
2、容器的比较
- Vector:连续的空间存储,可以使用[ ]操作符。Vector可以快速访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入、删除元素要慢,而且如果一开始分配的空间不够的话,有一个重新分配更大空间,然后拷贝的性能开销。
- Deque:小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[ ],只是速度没有vector快。Deque可以快速访问随机的元素,快速的在开始和末尾插入元素,随机的插入、删除元素要慢,空间的重新分配要比vector快,重新分配空间后,原