c++中vector的 = 與 assign的區別

網上錯誤說法

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

發佈了61 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章