array - C++, copiar establecer en vector
copy vector c++ (5)
Necesitas usar un back_inserter
:
std::copy(input.begin(), input.end(), std::back_inserter(output));
std::copy
no agrega elementos al contenedor en el que está insertando: no puede; solo tiene un iterador en el contenedor. Debido a esto, si pasa un iterador de salida directamente a std::copy
, debe asegurarse de que apunte a un rango que sea al menos lo suficientemente grande como para mantener el rango de entrada.
std::back_inserter
crea un iterador de salida que llama a push_back
en un contenedor para cada elemento, por lo que cada elemento se inserta en el contenedor. Alternativamente, podría haber creado una cantidad suficiente de elementos en std::vector
para mantener el rango que se está copiando:
std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
O bien, puede usar el constructor de rango std::vector
:
std::vector<double> output(input.begin(), input.end());
Necesito copiar std::set
a std::vector
:
std::set <double> input;
input.insert(5);
input.insert(6);
std::vector <double> output;
std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable
¿Dónde está el problema?
No ha reservado suficiente espacio en su objeto vectorial para contener el contenido de su conjunto.
std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
Solo usa el constructor para el vector que toma los iteradores:
std::set<T> s;
//...
std::vector v( s.begin(), s.end() );
Asume que solo quiere el contenido de s en v, y no hay nada en v antes de copiar los datos en él.
aquí hay otra alternativa usando vector::assign
:
theVector.assign(theSet.begin(), theSet.end());
std::copy
no se puede usar para insertar en un contenedor vacío. Para hacer eso, necesitas usar un insert_iterator así:
std::set<double> input;
input.insert(5);
input.insert(6);
std::vector<double> output;
std::copy(input.begin(), input.end(), inserter(output, output.begin()));