Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39581
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-19 14:23
个人简介

本尊不死,尔等终究为奴...

文章分类

全部博文(8)

文章存档

2016年(1)

2015年(4)

2013年(3)

我的朋友

分类: C/C++

2015-10-26 18:23:17


1、释放内存:
    empty()是用来检测容器是否为空的,clear()可以清空所有元素。但是即使clear(),所占用的内存空间依然如故。如果你需要空间动态缩小,可以考虑使用deque。如果非要用vector,这里有一个办法:
    在《effective STL》和其实很多C++文章中都有指明,用clear()无法保证内存回收。但是swap技法可以。具体方法如下所示:

点击(此处)折叠或打开

  1. vector<int> ivec;
  2. ivec.push_back(1);
  3. ivec.push_back(1);
  4. ivec.push_back(2);
  5. ivec.push_back(2);
  6. vector().swap(ivec);
  7. //或者
  8. ivec.swap(vector());
  9. vector().swap(ivec);
  10. //或者如下所示 加一对大括号都可以,意思一样的:
  11. {
  12.     std::vector tmp;
  13.     ivec.swap(tmp);
  14. }

2、修整空间
    在一个应用中,可能会需要向一个vector中插入很多记录,比如说100000条,为了避免在插入过程中移动内存,咱实现向系统预订一段足够的连续的空间,例如

    vector ivec;
    ivec.reserve(100000);

    这个问题是解决了。
    但是,如果后来这个vector不再需要存那么多的元素了,已经通过erase删除了。但是以前咱们预留的空间却无法被其他程序再度利用,这样会造成内存一定程度上的浪费。于是,我们利用目前的vector构造一个一模一样的vector,他并没有预留空间,于是以前预留的空间也被释放以作他用了:
    ivec.swap(vector(ivec));
    //vector(ivec).swap(ivec)

或者如下所示 加一对大括号都可以,意思一样的:
    {
        std::vector tmp = ivec;   
        ivec.swap(tmp);
    }   
  
     使用这种方法的前提是vector从前存储了大量数据,比如10000000,经过各种处理后,现在只有100条,那么向清空原来数据所占有的空间,就可以通过交换函数swap(),使得vector离开其自身的作用域,从而强制释放vector所占的内存空间。


点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <vector>

  3. using namespace std;

  4. int main( )
  5. {
  6.     vector<int> v1, v2;
  7.     v1.push_back( 1 );
  8.     v1.push_back( 2 );
  9.     v1.push_back( 3 );
  10.     v2.push_back( 10 );
  11.     v2.push_back( 20 );
  12.     cout << "The number of elements in v1 = " << v1.size( ) << endl;
  13.     cout << "The number of elements in v2 = " << v2.size( ) << endl;
  14.     cout << endl;
  15.     v1.swap( v2 );
  16.     cout << "The number of elements in v1 = " << v1.size( ) << endl;
  17.     cout << "The number of elements in v2 = " << v2.size( ) << endl;
  18.     return 0;
  19. }


Output:

    The number of elements in v1 = 3
    The number of elements in v2 = 2

    The number of elements in v1 = 2
    The number of elements in v2 = 3


阅读(1410) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~