Effective STL条款17-条款18
2016-04-21 09:10
351 查看
条款17:使用交换技巧来修正过剩容量
本节条款告诉我们,如果你有一个vector的容器,容器的容量是10000,但是,现在只用了1,那么为了节省内存,我们应该只保留使用的vector容量,多余的容量应该释放。那么,怎么释放呢?
作者提供了一种方式,如下代码:
vector<int> a; a.reserve(10000); a.push_back(1); vector<int>(a).swap(a);
以上代码做了什么?
很简单,a先是申请了10000的容量空间,接着使用了1个单位空间,最后,利用一个临时vector,根据拷贝构造函数,复制了a中的数据(此时临时对象的容量为1,因为vector的拷贝构造函数只分配拷贝的元素需要的内存)。通过swap方法让a还剩1个容量空间。
stirng也是一样
string s; s.reserve(10000); s.push_back('sss'); vector<int>(s).swap(s);
条款18:避免使用vector<bool>
本节主要就是说,bool的vector容器不是真正存储bool类型的对象,而是vector设计者用了位域的思想,直白的说就是一个bool对象由一个bit表示,而不是一个字节。所以,
vector<bool>对象不能执行如下操作
:
vector<bool>v; bool*pb=&v[0];//错误
如果深入探讨其中构造,则类型
&v[0]返回的是
reference*引用类型。
相关文章推荐
- 无废话ExtJs 入门教程五[文本框:TextField]
- javaScript面试题大全
- 在html属性中使用xsl变量
- 无废话ExtJs 入门教程四[表单:FormPanel]
- jquery实现侧边栏左右伸缩
- 俄罗斯方块游戏JavaScript代码
- JS、jQuery中select的用法详解
- IE11 F12工具报错 An error has occurredJSPlugin.3005
- CSS笔记(语法)
- 无废话ExtJs 入门教程三[窗体:Window组件]
- IE11 F12工具报错 An error has occurredJSPlugin.3005
- CSS命名规则
- asp.net js与后台C#代码相互调用
- ExtJs 入门教程
- js实现的省市联动
- 无废话ExtJs 入门教程二[Hello World]
- JavaScript charAt() 方法
- 无废话ExtJs 入门教程一[学习方法]
- sun.misc.unsafe类的使用
- 无废话ExtJs系列教程