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

相关文章
相关标签/搜索