vector 释放内存 swap

转自:https://blog.csdn.net/sunmenggmail/article/details/8605538

二、容器中的成员函数swap

        在容器vector中,其内存占用的空间是只增不减的,比如说首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个。所有内存空间在vector析构时回收。

     一般,我们都会通过vector中成员函数clear进行一些清除操作,但它清除的是所有的元素,使vector的大小减少至0,却不能减小vector占用的内存。要避免vector持有它不再需要的内存,这就需要一种方法来使得它从曾经的容量减少至它现在需要的容量,这样减少容量的方法被称为“收缩到合适(shrink to fit)”。(节选自《Effective STL》)如果做到“收缩到合适”呢,嘿嘿,这就要全仰仗“Swap大侠”啦,即通过如下代码进行释放过剩的容量:

  1. #include <iostream>  

  2. #include <algorithm>  
  3. #include <vector>  
  4. #include <iterator>  
  5.   
  6. using namespace std;  
  7.   
  8. int main ()   
  9. {  
  10.     int x = 10;  
  11.     vector<int> myvector(10000, x);    
  12.   
  13.     //这里打印仅仅是元素的个数不是内存大小  
  14.     cout << "myvector size:"  
  15.          << myvector.size()  
  16.          << endl;  
  17.   
  18.     //swap交换函数释放内存:vector<T>().swap(X);  
  19.     //T:int ; myvertor代表X  
  20.     vector<int>().swap(myvector);  
  21.   
  22.     //两个输出仅用来表示swap前后的变化  
  23.     cout << "after swap :"  
  24.          << myvector.size()  
  25.          << endl;  
  26.   
  27.     return 0;  
  28. }  

swap交换技巧实现内存释放思想:vector()使用vector的默认构造函数建立临时vector对象,再在该临时对象上调用swap成员,swap调用之后对象myvector占用的空间就等于一个默认构造的对象的大小,临时对象就具有原来对象v的大小,而该临时对象随即就会被析构,从而其占用的空间也被释放。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值