3

有一个简单的例子:

#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>;

我刚刚尝试了很多方法,但编译器总是返回错误......

是否有任何选项可以使此代码在不更改的情况下工作?我可以写一些额外的行,但不能编辑或删除现有的行。泰。


好的我明白了。我会用另一种方式问你.. 有没有什么选项可以让这段代码在不改变的情况下工作?我可以写一些额外的行,但不能编辑或删除现有的行。泰。

4

3 回答 3

12

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

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

或者:

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

两者都支持开箱即用:)

于 2010-02-03T15:43:48.320 回答
6

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

void Assign( vector <double> & vd, const vector <int> & vi ) {
  // your stuff here
}
于 2010-02-03T15:43:41.963 回答
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! ;)
}
于 2010-02-03T15:57:15.443 回答