Vector向量清除的方式總結

Vector向量清除的方式總結

清除vector有兩種含義

含義1:只清除內容,不收回空間

含義2:既清除內容,又收回空間

看看下面這個代碼:

#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

相關文章
相關標籤/搜索