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;
发现 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用法
下一篇: 对一个整数数位的统计及正序逆序的输出
推荐阅读
-
深入SQLServer中ISNULL与NULLIF的使用详解
-
android中Intent传值与Bundle传值的区别详解
-
详解CSS3中的box-sizing(content-box与border-box)
-
Jquery中attr与prop的区别详解
-
Python中几种属性访问的区别与用法详解
-
详解Nginx中的geo模块与利用其配置负载均衡的示例
-
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
-
linux中SUID,SGID与SBIT的奇妙用途详解
-
详解.NET中string与StringBuilder在字符串拼接功能上的比较
-
详解iOS应用UI开发中的九宫格坐标计算与字典转换模型