Online Myth
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());
The first
v1.size() = 0;
v2.size() = 3;
The second
v2 only changes the position of the pointer, pointing v1
The actual test results:
Test code:
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;
Test Results:
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
in conclusion:
= vector overloaded operators and assign the vector method, are deep copy,
ie: neither pointer to change, nor manipulated variable before removal.