《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在插入和删除时需要注意什么

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

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

vector专题的更多相关文章

  1. 【算法专题】工欲善其事必先利其器—— C++ STL中vector(向量/不定长数组)的常用方法总结

    #include<iostream> #include<cstdio> #include<string> #include<vector>//不定长数组 ...

  2. 五:Java之Vector类专题

    据说期末考试要考到Vector 这个类,出于复习须要在这里就要好好整理下这个类了. 一.基本概念 Vector 是可实现自己主动增长的对象数组. java.util.vector提供了向量类(vect ...

  3. STL专题·vector容器

    1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize (vector<int> a(10);) vecto ...

  4. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  5. DP专题训练之HDU 2955 Robberies

    打算专题训练下DP,做一道帖一道吧~~现在的代码风格完全变了~~大概是懒了.所以.将就着看吧~哈哈 Description The aspiring Roy the Robber has seen a ...

  6. 三代PacBio reads纠错 - 专题

    三代纠错的重要性不言而喻,三代的核心优势就是长,唯一的缺点就是错误率高,但好就好在错误是随机分布的,可以通过算法解决,这也就是为什么现在有这么多针对三代开发的纠错工具. 纠错和组装是分不开的,纠错就是 ...

  7. 跟我一起学STL(2)——vector容器详解

    一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ...

  8. [kuangbin带你飞]专题十 匹配问题

        A-L 二分匹配 M-O 二分图多重匹配 P-Q 二分图最大权匹配 R-S 一般图匹配带花树 模板请自己找     ID Origin Title   61 / 72 Problem A HD ...

  9. [kuangbin带你飞]专题十 匹配问题 二分图多重匹配

    二分图的多重匹配问题不同于普通的最大匹配中的"每个点只能有最多一条边" 而是"每个点连接的边数不超过自己的限定数量" 最大匹配所解决的问题一般是"每个 ...

随机推荐

  1. JVM学习第一天(虚拟机的前世今生与与Java的内存区域)

    其实说JVM的时候有很多人会懵, 也很不理解,我会写Java代码就可以了,我干嘛要学这个,其实不是的,学习JVM是很有必要性的; 为什么要了解JVM 1:写出更好,更健壮的Java程序; 2:提高Ja ...

  2. Mybatis源码学习第七天(插件源码分析)

    为了不把开发和源码分析混淆,决定分开写; 接下来分析一下插件的源码,说道这里老套路先说一个设计模式,他就是责任链模式 责任链模式:就是把一件工作分别经过链上的各个节点,让这些节点依次处理这个工作,和装 ...

  3. 通过股票K线图来谈谈真正的技术和现实的技术

    开局一张图 这是一张股票日线图,上面记载这近期每个交易日该股的开盘价,收盘价,最高价,最低价. 有兴趣的人可以估算下数据量和表的设计,似乎有点工作量.可这还只是一部分,你还可以获得每日分时数据,成交量 ...

  4. Python的链接数上升得太快了!足见Python之火!

  5. Git使用教程与基本原理和Sourcetree基本使用探微

    什么是GIT Git是一个强调速度的分布式版本控制软件和源代码管理系统(SCM,source code management).Git最初是由Linus Torvalds为内核开发而设计的管理软件.自 ...

  6. 第16课 - make的隐式规则(下)

    第16课 - make的隐式规则(下) 1

  7. 对比 Redis 中 RDB 和 AOF 持久化

    概念 Redis 是内存数据库,数据存储在内存中,一旦服务器进程退出,数据就丢失了,所以 Redis 需要想办法将存储在内存中的数据持久化到磁盘. Redis 提供了两种持久化功能: RDB (Red ...

  8. Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!

    Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位.本文即基于最佳实践的 Metr ...

  9. python中RGB色彩

    turtle.colormode(mode)来改变色彩数值的使用 如果在修改颜色时写turtle.colormode(1.0) ,就需要使用RGB小数模式来去改变颜色 如果在修改颜色时写turtle. ...

  10. java8的::

    public static void main(String[] args) throws Exception { // 第一种方法引用的类型是构造器引用,语法是Class::new,或者更一般的形式 ...