#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