Qual é uma boa maneira limpa de converter um std::vector<int> intVec
para std::vector<double> doubleVec
. Ou, de forma mais geral, para converter dois vetores de tipos conversíveis?
Qual é uma boa maneira limpa de converter um std::vector<int> intVec
para std::vector<double> doubleVec
. Ou, de forma mais geral, para converter dois vetores de tipos conversíveis?
Respostas:
Use std::vector
o construtor de intervalo de:
std::vector<int> intVec;
std::vector<double> doubleVec(intVec.begin(), intVec.end());
copy(v_int.begin(), v_int.end(), back_inserter(v_float));
ouv_float.resize(v_int.size()); copy(v_int.begin(), v_int.end(), v_float.begin());
std::distance()
"Se for um iterador de acesso aleatório, a função usa operador- para calcular isso. Caso contrário, a função usa o operador de aumento (operador ++) repetidamente." Portanto, neste caso, a quantidade de elementos pode ser encontrada subtraindo os iteradores. Se a biblioteca padrão é implementada para usar std :: distance para uma reserva inicial () é outra questão, mas godbolt.org/z/6mcUFh pelo menos contém uma chamada para std :: distance ().
std::copy(...)
função? Você poderia adicionar isso à resposta?