vector利用swap()函数进行内存的释放

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

empty()是用来检测容器是否为空的,clear()可以清空所有元素。
但是即使clear(),所占用的内存空间依然如故。如果你需要空间动态缩小,可以考虑使用deque。
如果非要用vector,这里有一个办法:
使用这种方法的前提是vector从前存储了大量数据,比如10000000,经过各种处理后,
现在只有100条,那么向清空原来数据所占有的空间,
就可以通过这种交换技术swap技法
就是通过交换函数swap(),使得vector离开其自身的作用域,
从而强制释放vector所占的内存空间。

1 vector<int>a,b;
2 for(int i=1;i<=10;++i) a.push_back(i);
3 a.swap(b);//这样a的空间大小就被释放了

但其实说实在的,这个并没有什么卵用,很少用到

posted @ 2019-10-21 21:44  月亮茶  阅读(3433)  评论(0编辑  收藏  举报