博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++中vector的 = 与 assign的区别
阅读量:2090 次
发布时间:2019-04-29

本文共 1066 字,大约阅读时间需要 3 分钟。

网上错误说法

vector
v1(3, 10); vector
v2(5, 4); vector
v3(6, 5); vector
v4(7, 8); v2 = v1; v4.assign(v3.begin(), v3.end());

第一种

v1.size() = 0;

v2.size() = 3;

第二种

v2 只是改变了指针位置,指向v1

实际测试结果:

测试代码:

vector
v1(3, 10); vector
v2(5, 4); vector
v3(6, 5); vector
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:  0x4db3b2f400V1-size:  3 v1.addr:  0x4db3b2f3e0v2-size:  3 v2.addr:  0x4db3b2f420V3-size:  6 v3.addr:  0x4db3b2f3c0v4-size:  6 v4.addr:  0x4db3b2f400

结论:

vector 的重载操作符 = 与 vector的 assign方法一样,都是深拷贝,

即:既没有改变指针指向,也没有清除之前的被操作变量。

转载地址:http://mimqf.baihongyu.com/

你可能感兴趣的文章
JTS Geometry关系判断和分析
查看>>
GIS基本概念
查看>>
Java文件操作①——XML文件的读取
查看>>
java学习总结之文件操作--ByteArrayOutputStream的用法
查看>>
Java生成和操作Excel文件
查看>>
Java的三种代理模式
查看>>
java静态代理与动态代理简单分析
查看>>
JTS Geometry关系判断和分析
查看>>
阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
查看>>
Intellij IDEA 使用技巧一
查看>>
idea如何显示git远程与本地的更改对比?
查看>>
Git 分支 - 分支的新建与合并
查看>>
git创建与合并分支
查看>>
23种设计模式介绍以及在Java中的实现
查看>>
如何把本地项目上传到Github
查看>>
Git的使用--如何将本地项目上传到Github
查看>>
zookeeper客户端命令行查看dubbo服务的生产者和消费者
查看>>
intellij idea 相关搜索快捷键
查看>>
oracle查看数据库连接池中最大连接数和当前用户连接数等信息
查看>>
oracle中创建同义词(synonyms)表
查看>>