Copiar un objeto contenedor vectorial en C++
- Use la notación de lista de inicializadores para copiar un objeto contenedor vectorial en C++
-
Utilice el algoritmo
std::copy
para copiar un objeto contenedor vectorial en C++ - Utilice el operador de asignación de copia para copiar un objeto contenedor vectorial en C++
- Utilice el constructor de copias para copiar un objeto contenedor vectorial en C++
-
Utilice la función miembro
assign
para 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;
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