#include <iostream> #include <vector> using namespace std; struct Edge { int v, d; }; int main() { cout << "****************一维vector***************" << endl; Edge e = Edge({ 1, 2 }); vector<Edge> Ve1; for (int i = 0; i < 5; ++i) Ve1.push_back(e); cout << Ve1.size() << ' ' << Ve1.capacity() << endl; Ve1.clear(); cout << Ve1.size() << ' ' << Ve1.capacity() << endl; vector<Edge>().swap(Ve1); cout << Ve1.size() << ' ' << Ve1.capacity() << endl; cout << "****************二维vector***************" << endl; vector<vector<Edge> > Ve2(10); for (int i = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) Ve2[i].push_back(e); } cout << Ve2.size() << ' ' << Ve2.capacity() << endl; for (int i = 0; i < 10; ++i) Ve2.clear(); cout << Ve2.size() << ' ' << Ve2.capacity() << endl; vector<vector<Edge> >().swap(Ve2); cout << Ve2.size() << ' ' << Ve2.capacity() << endl; return 0; }
若是处理的对象是一个vector,只须要用clear()函数去清除内容。若是是多个vector套娃,要注意两点,第一:声明的时候要声明行的规模,不然不会给你开空间,会runtime error!第二:获取每一个vector[i]而后clear便可完成向量内容清除。ios
若是你想要回收空间,那么优雅的解决方案是用一个空的vector去swap它!可是要注意哈,若非这个vector后面再也不使用,最好别这么干。这种回收方式要放在合适的地方才行,由于这是释放内存的方式,释放后再次使用须要从新分配内存才行,这样自己也是开销较大的方式。markdown