網上錯誤說法
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方法一樣,都是深拷貝,
即:既沒有改變指針指向,也沒有清除之前的被操作變量。