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