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; }
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; }
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; }
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
// 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; }
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; }
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
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