C++中vector的 = 与 assign 详解
c++中vector的 = 与 assign 详解
-
两个都是赋值操作,结论是均是深拷贝,直接看代码
-
先研究
较大空间 = 较小空间时的结果
vector<int> v1(1, 5);
vector<int> v2(2, 6);
vector<int> v3(3, 7);
vector<int> v4(4, 8);
cout << "v1.addr: " << &v1 << "\nv2.addr: " << &v2 << endl;
cout << "v3.addr: " << &v3 << "\nv4.addr: " << &v4 << endl;
v2 = v1;
cout << "v1-size: " << v1.size() << " v1.addr: " << &v1 << endl;
cout << "v2-size: " << v2.size() << " v2.addr: " << &v2 << endl;v4.assign(v3.begin(), v3.end());
cout << "v3-size: " << v3.size() << " v3.addr: " << &v3 << endl;
cout << "v4-size: " << v4.size() << " v4.addr: " << &v4 << endl;

发现 vector 的 = 与 assign完全等效
并且都是深拷贝:既没有改变指针指向,也没有清除之前的被操作变量
- 再研究一下
较小空间 = 较大空间时的结果
vector<int> v5(6);
vector<int> v6(66);
cout << "赋值前:" << endl;
cout << "v5-size: " << v5.size() << " v5.addr: " << &v5 << endl;
cout << "v6-size: " << v6.size() << " v6.addr: " << &v6 << endl;
v5 = v6;
cout << "赋值后:" << endl;
cout << "v5-size: " << v5.size() << " v5.addr: " << &v5 << endl;
cout << "v6-size: " << v6.size() << " v6.addr: " << &v6 << endl;

很离谱,刚开始以为是v6数量给小了,然后试了下666666结果还是指针指向没有变,暂时不清楚如何实现的,但是 =与 assign 是完全等效的。
更全知识点总结
- 更多vector知识总结
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
