返回对stl向量的引用

时间:2013-05-22 08:43:39

标签: c++ vector stl reference

我正在构建一个小型C ++程序,我正在一个类中实现自定义运算符。我也在使用STL向量。

但是我一开始就陷入困境。这是我的界面类:

class test {

    vector<string> v;
    public:
         vector<string>& operator~();      
};

这是实施:

vector< string>& test::operator~(){

    return v;
}

我想返回对向量的引用,所以在主程序中我可以做这样的事情

int main(){

    test A;
    vector<string> c;
    c.push_back("test");
    ~A=c;
//i want to do it so the vector inside the class takes the value test,thats why i need reference

}

更新

该程序有效,但它不会返回对该类属性的引用,例如:

如果我有这样的事情:

int main(){

       test A;
       A.v.push_back("bla");
       vector<string> c;
       c=~A;
      //This works, but if i want to change value of vector A to another vector declared in main
       vector<string> d;
       d.push_back("blabla");
       ~A=d;
       //the value of the A.v is not changed! Thats why i need a reference to A.v
  }

1 个答案:

答案 0 :(得分:0)

当您执行~A = d时,它与A.v = d相同(如果v是公开的)。

它不会将旧对象v与新对象d交换,它只会将A.v的内容替换为d内容的副本,请参阅more information about vector::operator=

class test {
    vector<string> v;
  public:
    test() {
        v.push_back("Hello");
    }

    void print() {
        for(vector<string>::iterator it=v.begin(); it!=v.end(); ++it) {
            cout << *it;
        }
        cout << endl;
    }

    vector<string>& operator~() {
        return v;
    }      
};

int main(){
    test A;
    A.print();
    vector<string> c;
    c.push_back("world");
    ~A = c;
    A.print();
}

按预期输出(如您所见here):

Hello
world