Effective STL--交换技巧来修改过剩容量
2014-12-06 19:47
351 查看
通过“交换技巧”来修正过剩容量
假设一个向量在使用的过程中被扩大了容量,但是在以后的过程中向量中的元素又被删除,虽说向量中的元素被删除但是向量的容量没有变小,也就是说原来申请的内存空间没有得到释放,加入在某一个时刻向量的容量为10000,最后向量中的元素个数可能是10,那么过剩的空间就是浪费,这个时候可以通过交换算法来修改向量的大小。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vc;
vc.reserve(128);
for(int i=0;i<10;i++)
vc.push_back(i);
cout<<vc.size()<<endl;
cout<<vc.capacity()<<endl;
vector<int> (vc).swap(vc);
cout<<vc.size()<<endl;
cout<<vc.capacity()<<endl;
system("pause");
return 0;
}
String s;
//在使用的过程中使s变大,然后又删除了所有,这个使用s的容量很大,但是size很小。
String(s).swap(s); //在s上进行“收缩到合适”。
避免使用vector<bool>,vector<bool>不是一个STL容器,它并不容纳bool。因为vector<bool>是一个伪容器,并不保存真正的bool,而是打包bool以节省空间。哎一个典型的实现中,每个保存在vector中的bool占用一个单独的比特,而一个8比特的字节将容纳8个”bool”。在内部,vector<bool>使用了与位域等价的思想来表示它假装容纳的bool。
不过在STL中是有替代品的。而deque<bool>是一个STL容器,它保存真正的bool值。Deque内部内存不是连续的。所以不能传递deque<bool>中的数据给一个希望得到bool数组的 C API。第二个替代品是bitset,bitset不是一个STL容器,但它是C++标准库的一部分。与STL容器不同,它的大小在编译期固定,因此它不支持插入和删除元素。因为它不是一个STL容器,它也不支持iterator.
假设一个向量在使用的过程中被扩大了容量,但是在以后的过程中向量中的元素又被删除,虽说向量中的元素被删除但是向量的容量没有变小,也就是说原来申请的内存空间没有得到释放,加入在某一个时刻向量的容量为10000,最后向量中的元素个数可能是10,那么过剩的空间就是浪费,这个时候可以通过交换算法来修改向量的大小。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vc;
vc.reserve(128);
for(int i=0;i<10;i++)
vc.push_back(i);
cout<<vc.size()<<endl;
cout<<vc.capacity()<<endl;
vector<int> (vc).swap(vc);
cout<<vc.size()<<endl;
cout<<vc.capacity()<<endl;
system("pause");
return 0;
}
String s;
//在使用的过程中使s变大,然后又删除了所有,这个使用s的容量很大,但是size很小。
String(s).swap(s); //在s上进行“收缩到合适”。
避免使用vector<bool>,vector<bool>不是一个STL容器,它并不容纳bool。因为vector<bool>是一个伪容器,并不保存真正的bool,而是打包bool以节省空间。哎一个典型的实现中,每个保存在vector中的bool占用一个单独的比特,而一个8比特的字节将容纳8个”bool”。在内部,vector<bool>使用了与位域等价的思想来表示它假装容纳的bool。
不过在STL中是有替代品的。而deque<bool>是一个STL容器,它保存真正的bool值。Deque内部内存不是连续的。所以不能传递deque<bool>中的数据给一个希望得到bool数组的 C API。第二个替代品是bitset,bitset不是一个STL容器,但它是C++标准库的一部分。与STL容器不同,它的大小在编译期固定,因此它不支持插入和删除元素。因为它不是一个STL容器,它也不支持iterator.
相关文章推荐
- effective STL : 使用“交换技巧”来修整过剩容量
- effective stl 条款17:使用“交换技巧”来修整过剩容量
- 使用“交换技巧”来修整容器过剩容量
- 使用“交换技巧”来修整过剩容量
- STL学习笔记之使用“交换技巧”来修整顺序容器的过剩容量
- Effective STL: 使用swap来修整过剩容量
- effective stl 第17条: 使用“swap 技巧”除去多余的容量
- VS2005 DEBUG状态下修改代码(VS2005 使用技巧)
- 注册表整理系统技巧和故障处理修改文件右键菜单
- 修改注册表恢复IE设置的方法与技巧
- SharePoint 2007 设计技巧之修改欢迎菜单的箭头显示
- 电脑知识及技巧大全1--系统相关22-2000XP注册表终极修改
- 博客技巧:修改CSDN博客的样式表
- Myeclipse快捷使用和修改技巧
- 背板,线速,交换容量
- Community Server系列之七:快速找到需要修改的文件[技巧]
- [导入]Community Server系列之七:快速找到需要修改的文件[技巧] [转]
- 数据窗口修改小技巧
- Photoshop技巧:巧妙修改网页GIF图形按钮上的文字
- pjblog修改技巧汇总