STL: как перегрузить оператор = для <vector>? - PullRequest
3 голосов
/ 03 февраля 2010

Есть простой пример:

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

Мне нужно знать, как перегрузить оператор =, чтобы я мог выполнить присваивание следующим образом:

vector<double> = vector<int>;

Я только что пробовал много способов, но всегда компилятор возвращал ошибки ...

Есть ли возможность заставить этот код работать без его изменения? Я могу написать несколько дополнительных строк, но не могу редактировать или удалять существующие. Ty.


ОК, понятно. Я попрошу Тебя по-другому .. Есть ли возможность заставить этот код работать без его изменения? Я могу написать несколько дополнительных строк, но не могу редактировать или удалять существующие. Ty.

Ответы [ 3 ]

12 голосов
/ 03 февраля 2010

Почему бы не сделать это проще:

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

Или:

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

Оба поддерживаются "из коробки":)

6 голосов
/ 03 февраля 2010

Вы не можете. Оператор присваивания должен быть функцией-членом, что означает, что он должен быть членом шаблона std :: vector, который вы не можете изменять (или так говорит стандарт C ++). Поэтому вместо этого напишите бесплатную функцию:

void Assign( vector <double> & vd, const vector <int> & vi ) {
  // your stuff here
}
0 голосов
/ 03 февраля 2010

Если это головоломка, это будет работать ...

#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! ;)
}
...