如果我有这样的课程(请原谅粗略的语法):
class Z{
public:
void method1();
void method2(vector<X>& v);
void method3(vector<X>& v);
private:
std::vector<X> myvec;
}
基本上我想将myvec从method1()传递到method2()到method3(),在那里它将被修改。如果我的method1()看起来像这样:
void Z::method1(){
vector<X> v = z::myvec; //What do I have to do with this line so that the changes
method2(v); //made to v in method3() are permanent and not lost once
} //method1() returns?
void Z::method2(vector<X>& v){
method3(v);
}
//Modify vector<X> myvec
void Z::method3(vector<X>& v){
v.push_back(<something>);
}
如何更改method3()中的向量,以便一旦method1()返回,对向量所做的更改是永久性的而不会丢失?
答案 0 :(得分:3)
只需将v
作为参考:
vector<X>& v = myvec;
或简单地传递myvec
本身:
method2(myvec);
答案 1 :(得分:2)
为什么不让method3直接使用类的成员数据?这是完全正常的事情。
void Z::method3(){
myvec.push_back(<something>);
}
但如果你真的想按照自己的方式去做(并且我会反对它,因为它是如此特殊),用
替换你的第一个评论行vector<X>& v = z::myvec;
答案 2 :(得分:1)
我不知道你为什么要完全想要这个流程,method1() - &gt; method2() - &gt; method3()。如果这不是故意的,你可以在method3()中直接使用数据成员myvec。但我确信情况可能不是这样,必须有一个用例,因为你正在使用它。
换句话说,你可以用这种方式修改method1()。
void Z::method1(){
method2(z::myvec);
}
并保持其余功能。
实际上你的情况是在你的method1()中你正在创建新对象并通过引用传递新对象,所以所有的更改都是对新的向量而不是原始向量进行的。
vector<X> v = z::myvec; // this creates new object.
你的测试是调试。
如果这回答了你的疑问,请告诉我。