赞
踩
一、vector 和 deque容器提供了对元素的快速随机访问,但付出的代价是,在容器的任意位置插入或删除元素,比在容器尾部插
入和删除的开销更大。list 类型在任何位置都能快速插入和删除,但付出的代价是元素的随机访问开销较大。
二、list、vector、deque的各自特征:
1、list 容器表示不连续的内存区域,允许向前和向后逐个遍历元素。在任何位置都可高效地 insert 或 erase 一个元素。插
入或删除 list 容器中的一个元素不需要移动任何其他元素。另一方面,list 容器不支持随机访问,访问某个元素要求遍历涉
及的其他元素。
2、对于 vector 容器,除了容器尾部外,其他任何位置上的插入(或删除)操作都要求移动被插入(或删除)元素右边所有
的元素。例如,假设有一个拥有 50个元素的 vector 容器,我们希望删除其中的第 23 号元素,则 23 号元素后面的所有元素
都必须向前移动一个位置。否则, vector 容器上将会留下一个空位(hole),而 vector 容器的元素就不再是连续存放的了。
3、deque 队列的两端插入和删除元素都非常快。在容器中间插入或删除付出的代价将更高。 deque 容器同时提供了list 和
vector 的一些性质:
1)与 vector 容器一样,在 deque 容器的中间 insert 或 erase 元素效率比较低;
2)不同于 vector 容器,deque 容器提供高效地在其首部实现 insert 和erase 的操作,就像在容器尾部的一样;
3)与 vector 容器一样而不同于 list 容器的是, deque 容器支持对所有元素的随机访问;
4)在 deque 容器首部或尾部插入元素不会使任何迭代器失效,而首部或尾部删除元素则只会使指向被删除元素的迭
代器失效。在 deque 容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器都失效。
通常来说,除非找到选择使用其他容器的更好理由,否则vector 容器都是最佳选择。
三、一些选择容器类型的法则:
1、 如果程序要求随机访问元素,则应使用 vector 或 deque 容器;
2.、如果程序必须在容器的中间位置插入或删除元素,则应采用 list 容器;
3、 如果程序不是在容器的中间位置,而是在容器首部或尾部插入或删除元素,则应采用 deque 容器;
4、 如果只需在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑在输入时将元素读入到一个 list 容
器,接着对此容器重新排序,使其适合顺序访问,然后将排序后的 list 容器复制到一个 vector容器。
5、如果无法确定某种应用应该采用哪种容器,则编写代码时尝试只使用 vector 和 lists 容器都提供的操作:使用迭代器,而不
是下标,并且避免随机访问元素。这样编写,在必要时,可很方便地将程序从使用 vector 容器修改为使用 list 的容器。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。