Как скопировать один вектор в другой, если у них разные типы? С++

Предположим, есть вектор:

std::vector<MyType1> vec1;

При условии, что MyType2 может быть построен из MyType1, как мне инициализировать второй вектор? Пробовал сделать так:

std::vector<MyType2> vec2 {vec1};

Ответы (3 шт):

Автор решения: Harry

Попробуйте

vec2.assign(vec1.begin(),vec1.end());
→ Ссылка
Автор решения: user7860670

::std::vector<MyType2> vec2{vec1.begin(), vec1.end()};

→ Ссылка
Автор решения: KoVadim

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

std::vector<int> a {1,2,3,4};
std::vector<std::string> b;

std::transform(
    a.begin(), a.end(), // исходный вектор
    std::back_inserter(b), // результирующий вектор
    [](auto q) { return std::to_string(q) + "\n";} // функция преобразования
);

я использовал back_inserter, который в данном случае просто скрывает push_back, но можно выделить память под результирующий вектор (через b.resize(a.size()); ) и потом можно просто указать b.begin()

→ Ссылка