设为首页 加入收藏

TOP

Effective STL: 使用swap来修整过剩容量
2015-07-20 17:40:55 来源: 作者: 【 】 浏览:1
Tags:Effective STL: 使用 swap 修整 过剩 容量

要避免你的vector持有它不再需要的内存,你需要有一种方法来把它从曾经最大的容量减少到它现在需要的容量。这样减少容量的方法常常被称为“收缩到合适(shrink to fit)”

class Contestant {...};
vector
   
     contestants; vector
    
     (contestants).swap(contestants); 
    
   

说明:

表达式vector(contestants)建立一个临时vector,它是contestants的一份拷贝:vector的拷贝构造函数做了这个工作。但是,vector的拷贝构造函数只分配拷贝的元素需要的内存,所以这个临时vector没有多余的容量。然后我们让临时vector和contestants交换数据,这时我们完成了,contestants只有临时变量的修整过的容量,而这个临时变量则持有了曾经在contestants中的发胀的容量。在这里(这个语句结尾),临时vector被销毁,因此释放了以前contestants使用的内存。

同样的技巧可以应用于string:

string s;

... // 使s变大

string(s).swap(s); // 在s上进行“收缩到合适”

交换技巧的变体可以用于清除容器和减少它的容量到你的实现提供的最小值。

vector
   
     v; string s; ... 
    // 使用v和s vector
    
     ().swap(v); 
     // 清除v而且最小化它的容量string().swap(s); 
     // 清除s而且最小化它的容量
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 5008西安网络赛B题:后缀数组.. 下一篇HDU 1316-How Many Fibs?(大数类..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 C 语言或者限制使 (2025-12-25 08:50:05)
·C++构造shared_ptr为 (2025-12-25 08:50:01)
·既然引用计数在做 GC (2025-12-25 08:49:59)
·Java 编程和 c 语言 (2025-12-25 08:19:48)
·. net内存管理宝典这 (2025-12-25 08:19:46)