您的位置:首页 > Web前端

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*
引用类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: