Formas de copiar un vector en C++

En el caso de las arrays, no hay muchas opciones para copiar una array en otra, aparte del método iterativo, es decir, ejecutar un ciclo para copiar cada elemento en su índice respectivo. Pero las clases de vectores tienen más de un método para copiar vectores completos en otros de manera más sencilla.

Hay básicamente dos tipos de copia: – 

Método 1: método iterativo. Este método es un método general para copiar, en este método se usa un bucle para empujar() los elementos del vector antiguo al nuevo vector. son profundamente copiados 

CPP

// C++ code to demonstrate copy of vector 
// by iterative method. 
#include<iostream> 
#include<vector> 
using namespace std; 
  
int main() 
{ 
    // Initializing vector with values 
    vector<int> vect1{1, 2, 3, 4}; 
  
    // Declaring new vector 
    vector<int> vect2; 
  
    // A loop to copy elements of 
    // old vector into new vector 
    // by Iterative method 
    for (int i=0; i<vect1.size(); i++) 
        vect2.push_back(vect1[i]); 
  
    cout << "Old vector elements are : "; 
    for (int i=0; i<vect1.size(); i++) 
        cout << vect1[i] << " "; 
    cout << endl; 
  
    cout << "New vector elements are : "; 
    for (int i=0; i<vect2.size(); i++) 
        cout << vect2[i] << " "; 
    cout<< endl; 
  
    // Changing value of vector to show that a new 
    // copy is created. 
    vect1[0] = 2; 
  
    cout << "The first element of old vector is :"; 
    cout << vect1[0] << endl; 
    cout << "The first element of new vector is :"; 
    cout << vect2[0] <<endl; 
  
    return 0; 
} 
Producción

Old vector elements are : 1 2 3 4 
New vector elements are : 1 2 3 4 
The first element of old vector is :2
The first element of new vector is :1

En el código anterior, cambiar el valor en un vector no alteró el valor en otro vector, por lo tanto, no se asignan a la misma dirección, por lo tanto, copia profunda.

Método 2: Por asignación del operador “=” . Simplemente asignando el nuevo vector al anterior, se copia el vector. Esta forma de asignación no es posible en el caso de arrays. 

CPP

// C++ code to demonstrate copy of vector 
// by iterative method. 
#include<iostream> 
#include<vector> 
using namespace std; 
  
int main() 
{ 
    // Initializing vector with values 
    vector<int> vect1{1, 2, 3, 4}; 
  
    // Declaring new vector 
    vector<int> vect2; 
  
    // Using assignment operator to copy one 
    // vector to other 
    vect2 = vect1; 
  
    cout << "Old vector elements are : "; 
    for (int i=0; i<vect1.size(); i++) 
        cout << vect1[i] << " "; 
    cout << endl; 
  
    cout << "New vector elements are : "; 
    for (int i=0; i<vect2.size(); i++) 
        cout << vect2[i] << " "; 
    cout<< endl; 
  
    // Changing value of vector to show that a new 
    // copy is created. 
    vect1[0] = 2; 
  
    cout << "The first element of old vector is :"; 
    cout << vect1[0] << endl; 
    cout << "The first element of new vector is :"; 
    cout << vect2[0] <<endl; 
  
    return 0; 
} 
Producción

Old vector elements are : 1 2 3 4 
New vector elements are : 1 2 3 4 
The first element of old vector is :2
The first element of new vector is :1

Método 3: Pasando vector como constructor. En el momento de la declaración del vector, pasar un vector antiguo inicializado copia los elementos del vector pasado en el vector recién declarado. Están profundamente copiados. 

CPP

// C++ code to demonstrate copy of vector 
// by constructor method. 
#include<bits/stdc++.h> 
using namespace std; 
  
int main() 
{ 
    // Initializing vector with values 
    vector<int> vect1{1, 2, 3, 4}; 
  
    // Declaring new vector and copying 
    // element of old vector 
    // constructor method, Deep copy 
    vector<int> vect2(vect1); 
  
    cout << "Old vector elements are : "; 
    for (int i=0; i<vect1.size(); i++) 
        cout << vect1[i] << " "; 
    cout << endl; 
  
    cout << "New vector elements are : "; 
    for (int i=0; i<vect2.size(); i++) 
        cout << vect2[i] << " "; 
    cout<< endl; 
  
    // Changing value of vector to show that a new 
    // copy is created. 
    vect1[0] = 2; 
  
    cout << "The first element of old vector is :"; 
    cout << vect1[0] << endl; 
    cout << "The first element of new vector is :"; 
    cout << vect2[0] <<endl; 
  
    return 0; 
} 
Producción

Old vector elements are : 1 2 3 4 
New vector elements are : 1 2 3 4 
The first element of old vector is :2
The first element of new vector is :1

Método 4: copiar (first_iterator_o, last_iterator_o, back_inserter()) : – Esta es otra forma de copiar un vector antiguo en uno nuevo. Esta función toma 3 argumentos, primero, el primer iterador del vector anterior, segundo, el último iterador del vector anterior y tercero es la función back_inserter para insertar valores desde atrás. Esto también generó una copia profunda. 

CPP-STL-Self-Paced-Course

CPP

// C++ code to demonstrate copy of vector 
// by assign() and copy(). 
#include<iostream> 
#include<vector> // for vector 
#include<algorithm> // for copy() and assign() 
#include<iterator> // for back_inserter 
using namespace std; 
int main() 
{ 
    // Initializing vector with values 
    vector<int> vect1{1, 2, 3, 4}; 
  
    // Declaring new vector 
    vector<int> vect2; 
  
    // Copying vector by copy function 
    copy(vect1.begin(), vect1.end(), back_inserter(vect2)); 
  
    cout << "Old vector elements are : "; 
    for (int i=0; i<vect1.size(); i++) 
        cout << vect1[i] << " "; 
    cout << endl; 
  
    cout << "New vector elements are : "; 
    for (int i=0; i<vect2.size(); i++) 
        cout << vect2[i] << " "; 
    cout<< endl; 
  
    // Changing value of vector to show that a new 
    // copy is created. 
    vect1[0] = 2; 
  
    cout << "The first element of old vector is :"; 
    cout << vect1[0] << endl; 
    cout << "The first element of new vector is :"; 
    cout << vect2[0] <<endl; 
  
    return 0; 
} 
Producción

Old vector elements are : 1 2 3 4 
New vector elements are : 1 2 3 4 
The first element of old vector is :2
The first element of new vector is :1

Método 5: asignar (first_iterator_o, last_iterator_o):
este método asigna los mismos valores al nuevo vector que al anterior. Esto toma 2 argumentos, el primer iterador del vector anterior y el último iterador del vector anterior. Esto genera una copia profunda. 

CPP

// C++ code to demonstrate copy of vector 
// by assign() 
#include<iostream> 
#include<vector> // for vector 
#include<algorithm> // for copy() and assign() 
#include<iterator> // for back_inserter 
using namespace std; 
  
int main() 
{ 
    // Initializing vector with values 
    vector<int> vect1{1, 2, 3, 4}; 
  
    // Declaring another vector 
    vector<int> vect2; 
  
    // Copying vector by assign function 
    vect2.assign(vect1.begin(), vect1.end()); 
  
    cout << "Old vector elements are : "; 
    for (int i=0; i<vect1.size(); i++) 
        cout << vect1[i] << " "; 
    cout << endl; 
  
    cout << "New vector elements are : "; 
    for (int i=0; i<vect2.size(); i++) 
        cout << vect2[i] << " "; 
    cout<< endl; 
  
    // Changing value of vector to show that a new 
    // copy is created. 
    vect1[0] = 2; 
  
    cout << "The first element of old vector is :"; 
    cout << vect1[0] << endl; 
    cout << "The first element of new vector is :"; 
    cout << vect2[0] <<endl; 
  
    return 0; 
} 
Producción

Old vector elements are : 1 2 3 4 
New vector elements are : 1 2 3 4 
The first element of old vector is :2
The first element of new vector is :1

Método 6: mediante el uso de la función de inserción. La clase vector tiene una función estándar, insert() , que puede insertar elementos de un rango específico.

C++

// C++ code to demonstrate copy of vector
// by instert() function
  
#include<iostream>
#include<vector> // for vector
using namespace std;
  
int main()
{
    // Initializing vector with values
    vector<int> vect1{1, 2, 3, 4};
  
    // Declaring new vector
    vector<int> vect2;
  
    // Copying vector by insert function
    vect2.insert(vect2.begin(), vect1.begin(), vect1.end());
  
    cout << "Old vector elements are : ";
    for (int i=0; i<vect1.size(); i++)
        cout << vect1[i] << " ";
    cout << endl;
  
    cout << "New vector elements are : ";
    for (int i=0; i<vect2.size(); i++)
        cout << vect2[i] << " ";
    cout<< endl;
  
    // Changing value of vector to show that a new
    // copy is created.
    vect1[0] = 2;
  
    cout << "The first element of old vector is :";
    cout << vect1[0] << endl;
    cout << "The first element of new vector is :";
    cout << vect2[0] <<endl;
  
    return 0;
}
  
//This code is contributed by Susobhan AKhuli
Producción

Old vector elements are : 1 2 3 4 
New vector elements are : 1 2 3 4 
The first element of old vector is :2
The first element of new vector is :1

Este artículo es una contribución de Manjeet Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *