第9章 顺序容器(7)

本文深入探讨了在编程中选择合适容器的重要性,着重于元素访问与插入操作对容器选择的影响。详细比较了list、vector、deque容器的特点,提供了选择容器的实用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

9.5 容器的选用

1. 插入操作如何影响容器的选择

list容器表示不连续的内存区域,允许向前和向后逐个遍历元素。在任何位置都可高效地insert或erase一个元素。插入或删除list容器中的一个元素不需要移动任何其他元素。另一方面,list容器不支持随机访问,访问某个元素要求遍历所涉及的其他元素。

对了vector容器,除了容器尾部外,其他任何位置上的插入(或删除)操作都要求移动被插入(或删除)元素右边所有的元素。

deque容器拥有更加复杂的数据结构。从deque队列的两端插入和删除元素都非常快。在容器中间插入或删除付出的代价将更高。deque容器的中间insert或erase元素效率比较低。

  • 与vector容器一样,在deque容器中间insert或erase元素效率比较低。
  • 不同于vector容器,deque容器提供高效地在其首部实现insert和erase的操作,就像在容器的尾部一样。
  • 与vector容器一样而不用于list容器的是,deque容器支持对所有元素的随机访问。
  • 在deque容器首部或尾部插入元素不会使任何迭代器失效,而在首部或尾部删除元素则只会使指向被删除元素的迭代器失效。在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器都失效。
2. 元素的访问如何影响容器的选择

vector和deque容器都支持对其元素实现高效的随机访问。在list容器的元素之间移动的唯一方法是顺序跟随指针。

通常来说,除非找到选择使用其他容器的更好理由,否则vector容器都是最佳选择。

3. 选择容器的提示

(1) 如果程序要求随机访问元素,则应使用vector或deque容器。

(2) 如果程序必须在容器的中间位置插入或删除元素,则应采用list容器。

(3) 如果程序不是在容器的中间位置,而是在容器首部或尾部插入或删除元素,则应采用deque容器。

(4) 如果只需要在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑在输入时将元素读入到一个list容器,接着对此容器重新排序,使其适合顺序访问,然后将排序后的list容器复制到一个vector容器。

如果无法确定某种应用应该采用哪种容器,则编写代码时尝试只使用vector和list容器都提供的操作:使用迭代器,而不是下标,并且避免随机访问元素。这样编写代码,在必要时,可很方便地将程序从使用vector容器修改为list容器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值