博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
论Java的ArrayList.add(e)和C++的vector.push_back(e)的区别
阅读量:6696 次
发布时间:2019-06-25

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

Java的ArrayList和C++的vector很类似,都是很基本的线性数据结构。但是他们的表现却不同。

在工作中碰到一个问题就是,搞不清楚到底传进去的是一个新对象,还是当前对象的引用!

 

经过实战分析:

在Java的ArrayList.add(e)中,传入的是引用,因此当你传入e以后,再改变e的成员,则ArrayList里的e也同样会改变,因为本身e和ArrayList中的e就是同一个东西。

而C++的vector.push_back(e)则会调用拷贝构造函数,因此当你传入e以后,再改变e的成员,则vector里的e不会变,因为已经是两个对象了。

Java代码:

运行如下:

1

2

可以看到,对于外面引用的改变对于ArrayList里面的元素也起作用了,下面来看看C++会怎么样。

C++代码:

#include 
#include
using namespace std;class A{public: A(int aa) { a = aa; cout<<"In Constructor(aa)"<
&vec) { for (int i = 0; i < vec.size(); i++) { vec[i].out(); } cout<
aVec; aVec.clear(); //弄1个值为1的a1,插入vector并打印 A a1(1); aVec.push_back(a1); print(aVec); //改a1的值为2,再打印 a1.a = 2; print(aVec); //修改vector内部的元素的值,再打印 aVec[0].a = 3; print(aVec); return 0;}

 

打印结果发现:

In Constructor(aa)In Constructor(&A)1  1  3

 说明确实调用了拷贝构造函数,那么vector内部的对象aVec[0]和外部的对象a1自然是两个独立的对象了,自然对a1.a的任何修改对于aVec内的值没有影响,只有对vector里的东西的修改才有影响。

 

经过上述折腾,算是都搞清楚了。以后有不懂得问题,一定要照着全搞明白去搞,不要怕麻烦。

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

你可能感兴趣的文章
组内评分
查看>>
centos7 修改静态ip 和dns
查看>>
android全磁盘加密
查看>>
慎用子查询,因为难以优化
查看>>
C语言的世界
查看>>
HDU 6041 - I Curse Myself | 2017 Multi-University Training Contest 1
查看>>
快给你的网站添加微信公众号吧!
查看>>
php+mysql 除了设置主键防止表单提交内容重复外的另一种方法
查看>>
I2S简单学习
查看>>
C# 中的拓展方法,以StringBuilder加上IndexOf方法举例
查看>>
Sass
查看>>
css怎么设置2个div同行,第一个固定宽度,第二个占满剩余的部分
查看>>
行内元素之间间距的产生与去除
查看>>
JS继承
查看>>
oracle 查询按月份分组
查看>>
scala(7)-----IF...ELSE 语句
查看>>
dede后台反应特别慢-转
查看>>
2015年1月25日
查看>>
ubuntu查看系统版本和内核版本
查看>>
GZFramework错误(升级修改)日志
查看>>