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