C++学习笔记九顺序容器(二)ForFreeDom博客园

C++学习笔记九顺序容器(二)ForFreeDom博客园,第1张

C++学习笔记九-顺序容器(二) - ForFreeDom - 博客园

一、插入 *** 作如何影响容器的选择:

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

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

      3.deque 容器拥有更加复杂的数据结构。从 deque 队列的两端插入和删除元素都非常快。在容器中间插入或删除付出的代价将更高。deque 容器同时提供了 listvector 的一些性质:

  •     A.与 vector 容器一样,在 deque 容器的中间 inserterase 元素效率比较低。

  •     B.不同于 vector 容器,deque 容器提供高效地在其首部实现 inserterase 的 *** 作,就像在容器尾部的一样。

  •     C.与 vector 容器一样而不同于 list 容器的是, deque 容器支持对所有元素的随机访问。

  •     D.在 deque 容器首部或尾部插入元素不会使任何迭代器失效,而首部或尾部删除元素则只会使指向被删除元素的迭代器失效。在 deque 容器的任何其他位置的插入和删除 *** 作将使指向该容器元素的所有迭代器都失效。

二、下面列举了一些选择容器类型的法则:

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

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

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

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

       5.如果程序既需要随机访问又必须在容器的中间位置插入或删除元素,那应该怎么办呢?

         此时,选择何种容器取决于下面两种 *** 作付出的相对代价:随机访问 list 容器元素的代价,以及在 vectordeque 容器中插入/删除元素时复制元素的代价。通常来说,应用中占优势的 *** 作(程序中更多使用的是访问 *** 作还是插入/删除 *** 作)将决定应该什么类型的容器。

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

四、再谈字符串:

?

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/2085758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-07-22
下一篇 2022-07-22

发表评论

登录后才能评论

评论列表(0条)

保存