欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++中vector的 = 与 assign 详解

程序员文章站 2022-03-01 23:19:39
...

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;

c++中vector的 = 与 assign 详解

发现 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;

c++中vector的 = 与 assign 详解
很离谱,刚开始以为是v6数量给小了,然后试了下666666结果还是指针指向没有变,暂时不清楚如何实现的,但是 =assign 是完全等效的。

更全知识点总结

  1. 更多vector知识总结
相关标签: C++ 指针 c++