Вы хотите преобразовать свой исходный вектор, например, с помощью изменяемой лямбды:
int main () {
std::vector<int> foo{1, 2, 3, 4};
std::vector<std::pair<int, int>> bar;
int i = 0;
std::transform(foo.begin(), foo.end(), std::back_inserter(bar), [i](int x) mutable {return std::make_pair(x, i++);});
}
Конструктор диапазона не будет работать, потому что вам нужно преобразовать свои операторы, поэтому алгоритм transform
является лучшимвариант.Вы можете заключить его в функцию, и тогда это будет то же количество строк, что и у конструктора диапазона.