C ++ = the difference in the vector and assign

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.

Published 56 original articles · won praise 10 · views 20000 +

Guess you like

Origin blog.csdn.net/birenxiaofeigg/article/details/103887325
Recommended