STL: как перегрузить operator= для <vector>?

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

#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 ответа

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

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

Или же:

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

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

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

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

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

#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! ;)
}
Другие вопросы по тегам