使用“swap技巧”除去多余的容量
为了避免vector占用不再需要的内存,需要有一种方法把它的容量(capacity)缩减到当前需要的数量。方法就是:vector<ElemType>(v).swap(v);。
vector<ElemType>(v)创建一个临时变量,它是v的一个拷贝。vector的拷贝构造函数只为所拷贝的元素分配所需要的内存,所以这个临时变量不会有多余的容量。然后将这个临时变量与v做swap操作,在这之后v就具有了被去除之后的容量,即原先临时变量的容量。临时变量会具有原先v的容量,随后临时变量被析构,从而释放内存。
测试程序及输出(vc2008):
vector<int> v; v.reserve(100); cout << v.capacity() << endl;for (int i = 0; i < 10; ++i)v.push_back(i);vector<int>(v).swap(v); cout << v.capacity() << endl;vector<int>().swap(v); cout << v.capacity() << endl;output: 100 10 0
同样的技巧对string也适用:string(s).swap(s);。
需要注意:这一技术并不保证去除全部多余的容量。STL的实现者可能会为vector和string保存一定的多余的容量。所以这种“swap技巧”实际上意味着“在容器当前的大小确定的情况下,使容量在该实现下变为最小”。
对于swap操作,需要注意:不仅两个容器的内容会被交换,同时它们的迭代器、指针和引用也将被交换(string除外)。在swap之后,原先指向容器中元素的迭代器、指针和引用依然有效,并指向同样的元素——但这些元素已经在另一个容器中了。
转载于:https://www.cnblogs.com/zhuyf87/archive/2012/12/06/2805318.html
使用“swap技巧”除去多余的容量相关推荐
- 删除桌面计算机,电脑设置小技巧(多余壁纸、屏保删除方法)
1.电脑桌面壁纸的删除方法 XP系统进入C:\WINDOWS\Web\Wallpaper...把里面不要的图片删除,就行了. 右键点击桌面-属性-背景-点你不要的那个背景壁纸-点击浏览(可以看见你不要 ...
- 根据html除去多余css样式在线,利用css-redundancy-checker去除冗余、无用、废弃的css样式代码...
背景 为网站写CSS样式的时候,经常会遇到CSS样式的修改或者网页设计的改变,而这些网页在经过无数次的修改之后,可能有些样式已经用不到了,css文件中可能存在着一些没用的CSS代码.这些无用的CSS代 ...
- Effective STL 50条有效使用STL的经验笔记
Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...
- 【C++】Effective STL:50条有效使用STL的经验
第一条:慎重选择容器类型 1.C++容器:先混个眼熟 序列容器:array.vector.string.deque.list.forward_list 有序关联容器:set.map.multiset. ...
- C++ 容器及选用总结
原文地址 目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭 ...
- ###《Effective STL》--Chapter2
点击查看Evernote原文. #@author: gr #@date: 2014-09-15 #@email: forgerui@gmail.com Chapter2 vector和string T ...
- 《Effective STL》条款解读
条款01:慎重选择容器类型 vector.list和deque有着不同的复杂度,vector是默认使用的序列类型.当需要频繁在序列中间做插入和删除操作时,应使用list.当大多数插入和删除操作发生在序 ...
- Effective STL中文版:50条有效使用STL的经验(双色)
<Effective STL中文版:50条有效使用STL的经验(双色)> 基本信息 作者: (美)梅耶(Meyers,S.) 译者: 潘爱民 陈铭 邹开红 出版社:电子工业出版社 ISBN ...
- Effective STL读书笔记
第一章容器 条款1:仔细选择你的容器 C++中各种标准或非标容器: 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set.mu ...
最新文章
- 图像修复中的TV模型
- CSUOJ 1525 Algebraic Teamwork
- findContours函数
- 数据中心管理将成为未来十年所需的技能
- 区块链BaaS云服务(12)易居(中国) 房地产 EBaaS(Estate Blockchain as a Service)
- Material Master_物料类型后台配置
- 前端 datatable 居中_Midway Serverless 如何让阿里前端提效 50%?
- java面试要点---oracle,mysql,DB2数据库的分页
- python修改wav文件声音大小_Python更改wav文件的音高
- Win10系统U盘启动盘制作详解
- html 图层嵌套特点,ps图层有哪几种类型?
- Davinci BI报表工具~
- 【网络安全】威胁情报信息
- 《数学之美》第一章读后感
- Android实现简单的网页跳转
- 【SGU】117. Counting 快速幂
- 洋码头 根据关键词取商品列表 API
- python办公自动化pdf下载,你们都用Python实现了哪些办公自动化?
- 光宇游戏软件测试面试,新闻中心
- CSS组件之图形(figure)
热门文章
- 在不推动提交的情况下触发Travis-CI重建?
- 如何在python中识别未知的日期时区时区
- win11如何执行干净启动 windows11执行干净启动的设置方法
- slam无人车清除地图残影
- urtlebot3启动键盘控制后 /cmd_vel 会持续输出数据,在键盘不给信号时 /cmd_vel 续输,导致此功能与导航同时启动,会导致小车自动行走时一顿一顿的
- C语言随笔小算法:单项链表如何实现队列
- 路径规划之图规划算法(图片版)
- 手机模板区块(HTML、CSS)
- 新增的表单元素 结构伪类选择器
- zlib 加密 java_JAVA自带Zlib+base64位压缩加密和解压解密