STL:如何为<vector>?</vector>重载operator =

时间:2010-02-03 15:40:09

标签: c++ stl vector operators conversion-operator

有一个简单的例子:

#include <vector>

int main() {
 vector<int> veci;
 vector<double> vecd;

 for(int i = 0;i<10;++i){
  veci.push_back(i);
  vecd.push_back(i);
 }
 vecd = veci; // <- THE PROBLEM
}

我需要知道的是如何重载operator =以便我可以像这样进行赋值:

vector<double> = vector<int>;

我刚尝试了很多方法,但编译器一直在返回错误......

有没有选项让这段代码无需更改即可运行?我可以写一些额外的行,但不能编辑或删除现有的行。 TY。


好的,我明白了。我会用另一种方式问你.. 是否有任何选项可以使此代码无需更改?我可以写一些额外的行,但不能编辑或删除现有的行。 TY。

3 个答案:

答案 0 :(得分:12)

为什么不以更简单的方式做到这一点:

vector<double> vecd( veci.begin(), veci.end() );

或者:

vecd.assign( veci.begin(), veci.end() );

开箱即用支持两种方式:)

答案 1 :(得分:6)

你做不到。赋值运算符必须是成员函数,这意味着它必须是std :: vector模板的成员,您不能修改它(或者C ++标准所说)。所以,编写一个自由函数:

void Assign( vector <double> & vd, const vector <int> & vi ) {
  // your stuff here
}

答案 2 :(得分:0)

如果这是一个谜题,这将有效...

#include <vector>

int main() 
{
    vector<int> veci;

    {
        vector<double> vecd;
    }

    vector<int> vecd;

    for (int i = 0; i < 10; ++i)
    {
        veci.push_back(i);
        vecd.push_back(i);
    }

    vecd = veci; // voila! ;)
}