Effective STL条款17-条款18

条款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*引用类型。

发布了152 篇原创文章 · 获赞 182 · 访问量 23万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章