《C++程序设计语言(第4部分:标准库)》

31.4 容器

31.4.1 vector
31.4.1.1 vector和增长
  • 重要知识点:vector的内存布局
  • vector不会在添加每个元素时都分配内存,而是在超出容量时才进行一次重新分配。
  • C++标准并未指定超出容量时向量的增长幅度,但很多C++实现都是增加大小的一半
  • 容量的概念令指向vector元素的迭代器只有在真正发生重分配时才会实现
31.4.1.1 vector和嵌套
  • vector的优势

    - vector的元素是紧凑存储的:所有元素都不存在额外的内存开销

    - vector的遍历非常快

    - vector支持简单高效的随机访问
  • 考虑二维矩阵的存储,对比以下两种解决方案,可见数据结构紧凑存储的重要性:

    - 使用vector<vector>:需要进行多次自由存储空间的分配,访问元素需要进行二次间接寻址

    - 使用vector:仅需要一次自由存储空间的分配,访问元素仅需要进行一次间接寻址
31.4.1.3 vector和数组(或array)
  • 内置数据(或array)可将数据存储在栈上,对比vector存储在自由存储空间,存在一定性能上的优势
  • 在允许使用未初始化元素的情况下,使用内置数据(或array)可能更优(如从标准输入读取数据存储到数组元素中)
31.4.1.4 vector和string
  • vector是一种保存值的通用机制,并不对保存的值之间的关系做任何假设
  • string设计的目的就是保存字符序列,它认为字符之间的关系非常重要

问题列表

  • vector与数组的区别:C++中数组和vector
  • vector在插入和删除时需要注意什么

    - 插入数据时,由于内存可能会进行重分配,那么插入数据前保存的迭代器可能会失效

    - 删除数据后,内存并不会回收,只是将需要删除的元素覆盖

最新文章

  1. HDU4348 To the moon
  2. Hadoop.2.x_无秘钥设置
  3. Css 特殊或不常用属性
  4. ie8 不支持new Date(&#39;2012-11-10&#39;)
  5. 锁_rac环境kill锁表会话后出现killed状态(解决)
  6. OC基础-day05
  7. BZOJ 1264 基因匹配Match(LCS转化LIS)
  8. element.style覆盖了我的样式!!
  9. dubbo 请求调用过程分析
  10. 前端到后台ThinkPHP开发整站(3)
  11. wget实例
  12. Redis之(四)事务
  13. 20175316盛茂淞 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周(6)
  14. BUG关闭原因
  15. JS截取文件后缀名
  16. Dubbo接口压测
  17. Spring Cloud(Dalston.SR5)--Hystrix 断路器
  18. 【转】AD常用端口
  19. VS注释与取消注释快捷键
  20. 干货:Java并发编程必懂知识点解析

热门文章

  1. rabbitmq集成和实战
  2. latex 封面
  3. 吴恩达《深度学习》-第五门课 序列模型(Sequence Models)-第一周 循环序列模型(Recurrent Neural Networks) -课程笔记
  4. 自定义 NSLog以便发版和调试
  5. Linux下rm操作误删恢复
  6. C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转
  7. k8s控制器资源
  8. java.lang.NoSuchMethodError: org.springframework.util.Assert.isTrue(ZLjava/util/function/Supplier;)V
  9. Boolean.valueOf(String)
  10. 【转】PostgreSQL Index性能调优