c++中vector地址相关问题。

2024-11-09 20:27:45
推荐回答(3个)
回答1:

vector a 相当于int a[]
这个认识是极端错误的
int a[]为包含数据为int型的数组,一组int类型的数据存放在内存中连续的空间内,是C++定义的最基本的内置数据类型之一
vector是一个容器,vector表明容器里存储的数据是int型的,是C++的标准库中定义的一个标准模板类
类的定义不仅包含数据,实际上也包含了这个数据上可以执行的操作
比如对于vector,定义了自己的方法,可以遍历、修改vector内的数据
不仅如此,还重载了一系列操作符,包括=

函数传值有两种方式,一种是传值,一种是传引用
void myfun(vector &a=b)
这是传引用的方式,这样这个函数对a的修改就是对调用他的函数中原来数据b的修改

void myfun(vector a=b)
是传值的方式,因为C++中已经定义了vector的=操作
这样这个函数就会构造一个新的vector,调用=操作符,把原来的b的数据复制到a里
然后函数里对a的修改都是这个副本的修改
函数调用完毕,这个副本也销毁了,原来的b并没有修改

调用的时候当然是myfun(a)

回答2:

1,a只是vector 类的对象,如需地址得用取地址操作符&
2,定义void myfun(vector &a=b)是用引用传递参数,这样做一般是为了节省内存空间,因为vector是模版类即< >之间可以放任意内置类型以及类类型,引用就减去了临时变量的创建(如果是void myfun(vector a=b) 会调用拷贝构造函数创建一个临时的跟实参一样的变量无疑增加了内存的消耗)。还有就会如楼上所说的是为了改变实参的值
3,调用的时候myfun(a),这是引用形参函数调用的时候就应该这样写,就是规矩,要是你早这么N年出生说不定规矩是你定
ps:建议楼主补充C++关于引用作为函数形参的知识,以及关于类的相关知识,貌似对于面向对象不怎么了解

回答3:

1、a是类对象,不是指针,自然&a才是指向它的地址。
2、&在类型定义中有引用的意思,这里自然是做引用了,做引用可以节省内存空间,减少拷贝vector时的时间消耗,又可以直接操作变量本身。
3、学到引用时这个问题就能理解了。