Copiar un objeto contenedor vectorial en C++

Jinku Hu 12 octubre 2023
  1. Use la notación de lista de inicializadores para copiar un objeto contenedor vectorial en C++
  2. Utilice el algoritmo std::copy para copiar un objeto contenedor vectorial en C++
  3. Utilice el operador de asignación de copia para copiar un objeto contenedor vectorial en C++
  4. Utilice el constructor de copias para copiar un objeto contenedor vectorial en C++
  5. Utilice la función miembro assign para copiar un objeto contenedor vectorial en C++
Copiar un objeto contenedor vectorial en C++

Este artículo explica varios métodos de cómo copiar un objeto contenedor std::vector en C++.

Use la notación de lista de inicializadores para copiar un objeto contenedor vectorial en C++

El std::vector es la estructura de datos principal proporcionada en la biblioteca de contenedores STL. Implementa elementos de array de tamaño dinámico que se almacenan de forma contigua. La gestión de la memoria se realiza automáticamente a medida que el usuario agrega o elimina elementos del array. Podemos hacer una copia del objeto vectorial usando la notación de la lista de inicializadores cuando construimos una nueva variable del tipo std::vector. Tenga en cuenta que solo necesitamos pasar los iteradores begin y end del objeto vectorial original que necesita ser copiado en un nuevo objeto. Con la misma notación, puede extraer cualquier subvector del objeto especificando los iteradores correspondientes como argumentos entre llaves.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c = {vec1.begin(), vec1.end()};
  vector<int> vec1_cc = {vec1.begin(), vec1.end() - 4};

  printVector(vec1_c);
  printVector(vec1_cc);

  return EXIT_SUCCESS;
}

Producción :

23; 43; 324; 222; 649; 102; 40; 304;
23; 43; 324; 222;

Utilice el algoritmo std::copy para copiar un objeto contenedor vectorial en C++

Otro método para copiar el objeto std::vector es invocar la función std::copy de la biblioteca de algoritmos STL. Proporciona la operación de copia genérica para objetos basados ​​en rangos. La función tiene múltiples sobrecargas, pero la sobrecarga utilizada en el siguiente fragmento de código toma tres argumentos de iterador. Los dos primeros especifican el rango del vector original, mientras que el tercer iterador indica el comienzo del rango del vector de destino.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c(vec1.size());
  copy(vec1.begin(), vec1.end(), vec1_c.begin());
  printVector(vec1_c);

  return EXIT_SUCCESS;
}

Producción :

23; 43; 324; 222; 649; 102; 40; 304;

Utilice el operador de asignación de copia para copiar un objeto contenedor vectorial en C++

Alternativamente, puede usar el operador de asignación de copia para copiar el contenido del objeto contenedor std::vector. Esta notación es la solución más concisa para este problema. Solo necesitamos asignar la variable del vector original al objeto de vector recién declarado.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c = vec1;
  printVector(vec1_c);

  return EXIT_SUCCESS;
}

Producción :

23; 43; 324; 222; 649; 102; 40; 304;

Utilice el constructor de copias para copiar un objeto contenedor vectorial en C++

Por otro lado, un constructor de copia de la clase std::vector ofrece un método similar para copiar el vector en un objeto vectorial recién declarado. En este caso, necesitamos pasar la variable del vector original entre paréntesis cuando se declara la variable de vector recién creada.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c(vec1);
  printVector(vec1_c);

  return EXIT_SUCCESS;
}

Producción :

23; 43; 324; 222; 649; 102; 40; 304;

Utilice la función miembro assign para copiar un objeto contenedor vectorial en C++

El contenedor std::vector proporciona la función miembro assign, que puede utilizar para reemplazar el contenido de un objeto vectorial con los elementos de otro vector. Observe que podemos inicializar un contenedor vector vacío y luego invocar la función assign del objeto para copiar el contenido de otro vector.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c;
  vec1_c.assign(vec1.begin(), vec1.end());
  printVector(vec1_c);

  return EXIT_SUCCESS;
}

Producción :

23; 43; 324; 222; 649; 102; 40; 304;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Vector