转自:http://www.cnblogs.com/taiyang-li/p/5997021.html
例一
vector<int> vec;
while (1)
{
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
....
// 处理的vec
func(vec);
// 释放vec内存
vec.clear();
}
例二
#include <iostream>
#include <vector>
using namespace std;
vector <string> v;
char ch;
int main ()
{
for(int i=0; i<1000000; i++)
v.push_back("abcdefghijklmn");
cin >> ch;
// 此时检查内存情况 占用54M
v.clear();
cin >> ch;
// 此时再次检查, 仍然占用54M
cout << "Vector 的 容量为" << v.capacity() << endl;
// 此时容量为 1048576
vector<string>(v).swap(v);
cout << "Vector 的 容量为" << v.capacity() << endl;
// 此时容量为0
cin >> ch;
// 检查内存,释放了 10M+ 即为数据内存
return 0;
}
可是使用clear释放vector内存有是问题的,可参考c++标准:
clear只是将vector的size置零,可是并不保证capacity为零,因此clear并不能释放vector已经申请的内存。可使用vector<T>().swap(x)完成释放内存的操作。swap技法就是通过交换函数swap(),使得vector离开其自身的作用域,从而强制释放vector所占的内存空间
比如
hierarchy.clear();
vector<Vec4i>(hierarchy).swap(hierarchy);
contours.clear();
vector<vector<Point>>(contours).swap(contours);
mu.clear();
vector<Moments>(mu).swap(mu);
mc.clear();
vector<Point2f>(mc).swap(mc);