1、考虑下面的需求,对于vec开始的时候有1000个元素,后来只有10个元素,那么vec的capacity至少还是1000,后面的990个内存单元,没有使用,但是还被vec霸占着。如何释放这些内存呢?

2、我们知道,vector进行copy构造的时候,根据rhs 的size进行分配内存。因此,我们可以建立一个临时对象,然后交换一下就可以了。如下:

  vector<int>(vec).swap(vec);

  vector<int>(vec) 是个临时对象,可认为capacity为10,而vec的capacity为1000,二者交换后,vec的capacity为10,临时对象析构。

3、这里需要注意两点:

  a、临时对象的capacity有可能还是大于10,不能保证容量最小,而是尽量小。

  b、对于vector 的swap方法,内部实现只是交换了彼此的begin指针和end指针,并没有交换内容。这个很好理解,对于资源管理类,也就是内含指针的类,交换的时候,只需要交换彼此的指针就好了。举个例子:甲住501,乙住502,现在甲乙想换房子。只要换一下钥匙就好了,如果去把房间里的家电家具换一下,方法也太笨了。

4、考虑一个特殊情况,我想清空一个容器,并释放所有内存,该怎么办?

  首先,clear方法是不行的,因为它只是把元素清空,内存还被霸占着。由上面的分析,很容易想到,拿一个空容器与当前容器交换一下,就行了。也就是:vector<int>().swap(vec);

最新文章

  1. Linux 计划任务 访问网页
  2. RBAC模型速记
  3. Python基础二
  4. 【Exception—WebForm】当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。
  5. Spring和mybatis整合后的mybais-config.xml配置
  6. 【转】Swift开源项目精选
  7. C# 类型参数的约束
  8. 系统学习sqlserver2012 一
  9. SQL NULL Values
  10. PHOTOSHOP 中画笔工具和铅笔工具的一个小小差别
  11. Android:MD5加密
  12. [转][JAVA]定时任务之-Quartz使用篇
  13. windows命令行模式下无法打开python程序解决方法
  14. apache rewrite rule
  15. Qt核心剖析:信息隐藏(三篇)
  16. alertifyjs
  17. JDBC连接Oracle错误ORA-00922: 选项缺失或无效
  18. SDOI 2018划水记
  19. 「ZJOI2016」解题报告
  20. IPerf——网络测试工具介绍与源码解析(1)

热门文章

  1. cppunit使用详解
  2. 设置TextView控件的背景透明度和字体透明度
  3. Delphi RxRichEdit高级操作
  4. bjfu1262 优先队列
  5. 编码的UI测试项目——Visual Studio 2013
  6. 软件工程个人项目-Word frequency program by11061167龚少波
  7. ubuntu下Qt cannot find -lGL错误的解决方法 (转载)
  8. GitHub--git push出错解决
  9. js运动 九宫格展开
  10. keil中如何得知所编译程序所占空间大小?