C++ STL 顺序容器--list + 关联容器

list 

  双向环装链表,可以双向遍历,但不能随机访问任意元素,可动态增加或者减少元素,内存管理自动完成,增加任何元素都不会使迭代器失效,

  删除元素时,除了指向当前被删元素的迭代器外,其他迭代器都不会失效

  iterator指向当前被删除元素的下一个。

deque

  vector是单向开口的连续空间,deque是双向开口的连续线性空间

  双向开口则意味着可以在头尾两端分别插入或者删除元素

关联容器和顺序容器的区别在于:关联容器通过key存储读取元素,而顺序容器则是通过元素在容器中的位置顺序存储和访问元素

关联容器:map set(红黑树实现)

map

  所有元素根据元素的键值自动排序。map的所有元素都是pair,同时拥有key和value,不允许有2个相同的key值

  map和list某些性质类似,客户端对他进行删除或者增加时,操作之前的所有迭代器仍然有效,当然,被删除的那个除外

set

  所有元素根据元素的键值自动排序,set元素的键值就是实值

  set和list某些性质类似,客户端对他进行删除或者增加时,操作之前的所有迭代器仍然有效,当然,被删除的那个除外

如何选择合适的容器?

  1)插入删除影响容器的选用

  list容器表示不连续的内存区域,双向环状链表,允许向前或者向后遍历,在任何位置都能insert或者erase,insert或者erase不需要一定别的元素

  vector除了在末尾插入元素,不用移动其他位置元素,其他位置插入删除都需要,是连续的内存空间。

  2)元素的访问影响选择

  vector和deque支持对元素实现高效的随机访问,vector容器每次访问都是距离起点的固定偏移,随机访问十分有效。但是,list容器访问则特别的慢

  通常,除非找到选择使用其他容器更好得分理由,否则我们都选择vector

选择容器的提示

  1)随机访问->vector/deque

  2)中间位置插入删除->list

  3)首部或者尾部插入删除->deque

  如果无法确定某种应用选择哪种容器,编写代码时只使用vector/list容器提供的操作:使用迭代器而不是下标,避免随机访问元素。在必要时,可以很方便的将vector容器变成list容器。

PS(黄色笔记上整理 有部分未整理 有需要可以在细看)

猜你喜欢

转载自www.cnblogs.com/lucky466/p/10103323.html
今日推荐