c++中vector的 = 与 assign的区别

网上错误说法

	vector<int> v1(3, 10);
	vector<int> v2(5, 4);
	vector<int>v3(6, 5);
	vector<int>v4(7, 8);
	v2 = v1;
	v4.assign(v3.begin(), v3.end());

第一种

v1.size() = 0;
v2.size() = 3;

第二种

v2 只是改变了指针位置,指向v1

实际测试结果:

测试代码:

	vector<int> v1(3, 10);
	vector<int> v2(5, 4);
	vector<int>v3(6, 5);
	vector<int>v4(7, 8);
	qDebug() << "v1.addr: " << &v1 << "\nv2.addr: " << &v2 << "\nv3.addr: " << &v3 << "\nv4.addr: " << &v4;
	v2 = v1;
	qDebug() << "V1-size: " << v1.size()<<"v1.addr: "<<&v1;
	qDebug() << "v2-size: " << v2.size()<< "v2.addr: " << &v2;

	v4.assign(v3.begin(), v3.end());
	qDebug() << "V3-size: " << v3.size() << "v3.addr: " << &v3;
	qDebug() << "v4-size: " << v4.size() << "v4.addr: " << &v4;

测试结果:

v1.addr:  0x4db3b2f3e0 
v2.addr:  0x4db3b2f420 
v3.addr:  0x4db3b2f3c0 
v4.addr:  0x4db3b2f400
V1-size:  3 v1.addr:  0x4db3b2f3e0
v2-size:  3 v2.addr:  0x4db3b2f420
V3-size:  6 v3.addr:  0x4db3b2f3c0
v4-size:  6 v4.addr:  0x4db3b2f400

结论:

vector 的重载操作符 = 与 vector的 assign方法一样,都是深拷贝,
即:既没有改变指针指向,也没有清除之前的被操作变量。

发布了61 篇原创文章 · 获赞 10 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章