1

如果我有这样的课程(请原谅粗略的语法):

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() 返回后,对向量所做的更改是永久性的并且不会丢失?

4

3 回答 3

3

只是做v一个参考:

vector<X>& v = myvec;

或简单地传递myvec自己:

method2(myvec);
于 2013-10-02T20:03:40.720 回答
2

为什么不让method3直接使用类的成员数据呢?这是完全正常的事情。

void Z::method3(){
    myvec.push_back(<something>);
}

但是,如果您真的想按照自己的方式进行操作(我建议您不要这样做,因为它是如此特殊),请将您的第一条评论行替换为

vector<X>& v = z::myvec; 
于 2013-10-02T20:05:18.573 回答
1

我不知道你为什么想要这个流程,method1()-->method2()-->method3()。如果这不是故意的,您可以直接在 method3() 中使用数据成员 myvec。但我确信情况并非如此,必须有一个用例,因为您正在使用它。

对于另一种方式,您可以通过这种方式修改 method1() 。

void Z::method1(){
    method2(z::myvec);                
}

并保持其余功能不变。

实际上,在您的情况下发生的事情是在您的 method1() 中,您实际上是在创建新对象并通过引用传递该新对象,因此所有更改都是针对该新向量而不是原始向量进行的。

vector<X> v = z::myvec;  // this creates new object.

你测试的是调试。

如果这回答了您的疑问,请告诉我。

于 2013-10-02T20:20:53.240 回答