欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-01 23:20:27
...

网上错误说法

	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方法一样,都是深拷贝,
即:既没有改变指针指向,也没有清除之前的被操作变量。