Какой хороший чистый способ преобразовать файл std::vector<int> intVec
в std::vector<double> doubleVec
. Или, в более общем смысле, преобразовать два вектора конвертируемых типов?
Какой хороший чистый способ преобразовать файл std::vector<int> intVec
в std::vector<double> doubleVec
. Или, в более общем смысле, преобразовать два вектора конвертируемых типов?
Ответы:
Используйте std::vector
конструктор диапазона:
std::vector<int> intVec;
std::vector<double> doubleVec(intVec.begin(), intVec.end());
copy(v_int.begin(), v_int.end(), back_inserter(v_float));
илиv_float.resize(v_int.size()); copy(v_int.begin(), v_int.end(), v_float.begin());
std::distance()
"Если это итератор с произвольным доступом, функция использует оператор- для вычисления. В противном случае функция повторно использует оператор увеличения (оператор ++)." Таким образом, в этом случае количество элементов может быть найдено путем вычитания итераторов. Реализована ли стандартная библиотека для использования std :: distance для начального резерва () - это другой вопрос, но godbolt.org/z/6mcUFh по крайней мере содержит вызов std :: distance ().
std::copy(...)
функцию? Не могли бы вы добавить это к ответу?