funcion array c++ copy stdvector stdset

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()));