《C++ Primer》读书笔记-第九章 01 顺序容器

作者:马志峰
链接:https://zhuanlan.zhihu.com/p/24262745
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:

  • 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
  • 原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
  • 本文仅作学习交流使用,禁止任何形式的转载

正文

本章内容

  • 概述
  • 所有容器都适用的操作
  • 顺序容器适用的操作
  • vector内存
  • string操作
  • 适配器

顺序容器

元素的存储和访问依赖于元素加入容器时的位置
提供了快速顺序访问元素的能力

  • vector,string 快速随机访问,尾部增删快
  • deque 快速随机访问,头尾增删快
  • array 快速随机访问,不能增删
  • list 只支持双向顺序访问,任何位置增删都快
  • forward_list 只支持单向顺序访问,任何位置增删都快

string和vector将元素保存在连续的内存空间中,所以由下标计算其地址是非常快速的;这也就造成了如果要在中间位置增删元素,其后的所有元素都要移动

list和forward_list解决了在中间位置增删的问题,但是不支持随机访问,只能遍历整个窗口来访问某一个元素,且空间开销大

array是新c++标准增加的数组类型,是一种更安全更易使用的数组类型

如何确定使用哪种容器

尽量使用vecotr,除非有更好的选择

通常情况下,我们可以根据各个容器的特点以及我们的实际需要来确定使用哪种容器

一个特殊的情况是:如果程序只有在读取输入时才需要在容器中间位置插入元素,随后需要随机访问元素,则

  • 确定是否可以使用vector以及sort函数来避免在中间位置插入元素
  • 如果必须在中间位置插入元素,考虑在输入阶段使用list,一旦输入完成,将list中的内容拷贝到一个vector中使用

如果既需要在中间位置插入元素,又需要随机访问,则需要考虑是以空间换时间,还是以时间换空间。根据实际场景确定是使用list(forward_list)或vecotr(deque)

猜你喜欢

转载自blog.csdn.net/qq_26751117/article/details/53559550
今日推荐