effective stl 第17条: 使用“swap 技巧”除去多余的容量
2016-09-10 19:57
381 查看
#include<iostream> #include<vector> #include<string> #include<set> using namespace std; class people { public: people(); ~people(); private: }; people::people() { } people::~people() { } int main() { /* 本次主要讨论的是如何消除有很大容量,但是只有很少元素的情况 假设某次比赛报名人数很多,都放在p容器中,但是经过筛选可能淘汰很多的人,可能使用erase或者其它的方法 结果缩减了该向量的size()即大小,但是capacity()容量的大小却没有变换 */ vector<people> p; //使用下边的做法可以消除p中多余的容量 //原因如下: //表达式vector<people>(p)创建了一个临时的向量,他是p的拷贝,然而vector的拷贝构造函数只为所拷贝的元素分配内存 //所以该临时变量没有多余的容量,所以交换之后刚刚好 //在语句的结尾,临时变量被析构,从而释放了先前p的内存,完美 vector<people>(p).swap(p); //同样的技巧对string也适用,现在解释()是什么意思,假设新建一个变量则是string s=new string(a);现在没有新建变量,而是直接 //使用后半句,所以在语句结束的时候自动调用析构函数释放内存 string s; //.... string(s).swap(s); /* 这种技术并不一定能保证去除多余的容量,因为STL设计者可能愿意为vector和string 保存多余的容量,他们可能需要一个最小的容量, 或者把vector和string的容量限制为2的乘幂数 简单来说,即这种方法是使得“容量尽量小”,即在容器当前的大小确定的情况下,使容量在该实现下变得最小 */ //swap的另一个技巧是清楚一个容器,并使得其容量变为该实现下的最小值 vector<people> vp; string ss; //经过一系列的操作之后 vector<people>().swap(vp); string().swap(ss); //在做swap交换时,不仅两个容器的内容被交换,同时他们的迭代器、指针和引用也将被交换 //在swap发生之后,原本指向某容器中的迭代器、指针和引用依然有效,并指向相同的元素,只是这些元素在另一个容器中了 return 0; }
相关文章推荐
- 使用swap技巧除去多余的容量 STL 第17条
- 使用“swap技巧”除去多余的容量
- 使用“swap技巧”除去多余的容量
- 使用swap技巧除去多余的容量
- 【S17】使用“swap技巧”除去多余的容量
- effective stl 条款17:使用“交换技巧”来修整过剩容量
- Effective STL: 使用swap来修整过剩容量
- effective STL : 使用“交换技巧”来修整过剩容量
- 利用swap技巧去除容器多余的容量
- 使用VB去掉文本行后多余空格的技巧
- STL学习笔记之使用“交换技巧”来修整顺序容器的过剩容量
- 使用“交换技巧”来修整过剩容量
- 使用“交换技巧”来修整容器过剩容量
- C++使用技巧:copy and swap idiom
- Effective STL: 使用swap来修整过剩容量
- C++使用技巧:copy and swap idiom
- swap 去除vector多余的容量
- Effective STL--交换技巧来修改过剩容量
- swap的使用技巧
- VisualAge使用技巧