Существует конструктор из std::vector
, принимающий диапазон и разрешающий пользовательское преобразование. Это то, что вам нужно:
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
Полная программа:
#include <vector>
#include <iostream>
struct Wrapper
{
int value;
Wrapper(int n) : value(n) {}
};
int main()
{
std::vector<int> integers = {0, 1};
std::vector<Wrapper> wrapped{begin(integers), end(integers)};
std::cout << wrapped[1].value << '\n';
}
Живая демоверсия
Это не особо оптимизировано, но делает меньше кода, меньше ошибок и меньше wtf / line. Что хорошо (ТМ).