los mismos
Las siguientes son las diferentes formas de copiar elementos de una array a un vector:
Método 1: solución ingenua
Recorra la array completa e inserte cada elemento en el vector recién asignado usando la función push_back() . A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program of the above approach #include <bits/stdc++.h> using namespace std; // Driver code int main() { // Initialise an array int arr[] = { 1, 2, 3, 4, 5 }; int N = sizeof(arr) / sizeof(arr[0]); // Initialize an empty vector vector<int> v; // Traverse the array and for (int i = 0; i < N; i++) v.push_back(arr[i]); // Print all elements of vector for (auto ele : v) { cout << ele << " "; } return 0; }
1 2 3 4 5
Método 2: asignación basada en rango durante la inicialización
En C++ , la clase Vector proporciona un constructor que acepta un rango, por lo que para crear un vector a partir de elementos de array, pase el puntero a la primera y última posición del rango como argumento durante el vector inicialización que debe copiarse en el vector, es decir, (arr, arr+N).
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program of the above approach #include <bits/stdc++.h> using namespace std; // Driver code int main() { // Initialise an array int arr[] = { 1, 2, 3, 4, 5 }; int N = sizeof(arr) / sizeof(arr[0]); // Initialize a vector by passing the // pointer to the first and last element // of the range as arguments vector<int> v(arr, arr + N); // Print all elements of vector for (auto ele : v) { cout << ele << " "; } return 0; }
1 2 3 4 5
Tenga en cuenta que también se pueden usar los iteradores que solían apuntar a las direcciones de memoria de los contenedores STL.
- std::begin(arr)- Iterador al primer elemento de una array.
- std::end(arr)- Iterador al que está después del último elemento de una array.
vector<int> v(begin(arr), end(arr));
Método 3: uso de la función de inserción incorporada (posición, primer_iterador, último_iterador): la inserción() es una función incorporada en C++ STL que inserta nuevos elementos antes del elemento en la posición especificada, aumentando efectivamente el tamaño del contenedor por el número de elementos insertado. En lugar de un solo valor, también se puede pasar un rango como argumentos.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program of the above approach #include <bits/stdc++.h> using namespace std; // Driver code int main() { // Initialise an array int arr[] = { 1, 2, 3, 4, 5 }; int N = sizeof(arr) / sizeof(arr[0]); // Initialize an empty vector vector<int> v; // Add array elements in the required // range into a vector from beginning v.insert(v.begin(), arr, arr + N); // Print all elements of vector for (auto ele : v) { cout << ele << " "; } return 0; }
1 2 3 4 5
Método 4: Uso de la función de copia incorporada (first_iterator, last_iterator, back_inserter()): esta es otra forma de copiar elementos de array en un vector mediante el uso de la función de copia incorporada . Esta función toma 3 argumentos, un iterador al primer elemento de la array, un iterador al último elemento de la array y la función back_inserter para insertar valores desde atrás.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program of the above approach #include <bits/stdc++.h> using namespace std; // Driver code int main() { // Initialise an array int arr[] = { 1, 2, 3, 4, 5 }; int N = sizeof(arr) / sizeof(arr[0]); // Initialize an empty vector vector<int> v; // Copy array elements in the required // range into vector v using copy function copy(begin(arr), end(arr), back_inserter(v)); // Print all elements of vector for (auto ele : v) { cout << ele << " "; } return 0; }
1 2 3 4 5
Método 5: Uso de la asignación de función incorporada (first_iterator, last_iterator): la función vector::assign() se puede usar para asignar valores a un vector nuevo o a un vector ya existente. También puede modificar el tamaño del vector si es necesario. Lleva el iterador a la primera y última posición como argumentos.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program of the above approach #include <bits/stdc++.h> using namespace std; // Driver code int main() { // Initialise an array int arr[] = { 1, 2, 3, 4, 5 }; int N = sizeof(arr) / sizeof(arr[0]); // Initialize an empty vector vector<int> v; // Assign the elements of the array // into the vector v v.assign(arr, arr + N); // Print all elements of vector for (auto ele : v) { cout << ele << " "; } return 0; }
1 2 3 4 5
Método 6: Uso de la función de transformación incorporada (first_iterator, last_iterator, back_insert(), función): La función std::transform() toma 4 argumentos, un iterador al primer elemento de la array, un iterador al último elemento de la array , la función back_inserter para insertar valores desde atrás y una función definida por el usuario que se puede usar para modificar todos los elementos de la array, es decir, realizar una operación unaria, convertir caracteres en minúsculas a mayúsculas, etc.
A continuación se muestra la implementación del enfoque anterior:
C++14
// C++ program of the above approach #include <bits/stdc++.h> using namespace std; // Function to increment the value by 1 int increment(int x) { return x + 1; } // Driver code int main() { // Initialise an array int arr[] = { 1, 2, 3, 4, 5 }; int N = sizeof(arr) / sizeof(arr[0]); // Initialize an empty vector vector<int> v; // Copy the elements of the array into // vector v and increment each value transform(arr, arr + N, back_inserter(v), increment); // Print all elements of vector for (auto ele : v) { cout << ele << " "; } return 0; }
2 3 4 5 6