Requisito previo: Vectores en C++
Cortar un vector significa hacer un subvector a partir de un vector dado.
Dados N enteros en un vector arr y números positivos X e Y , la tarea es dividir el vector dado del índice X a Y en un vector dado.
Ejemplos:
Entrada: vector arr = { 1, 3, 4, 2, 4, 2, 1 }, X = 2, Y = 5
Salida: 4 2 4 2
Entrada: vector arr = { 1, 3, 4, 2 }, X = 1, Y = 2
Salida: 3 4
Método 1: La idea es copiar los elementos de este rango X a Y a un nuevo vector y devolverlo.
- Obtenga el iterador inicial del elemento en el índice X como:
auto start = arr.begin() + X
- Obtenga el iterador final del elemento en el índice Y como:
auto end = arr.begin() + Y + 1
- Copie los elementos en este rango entre estos iteradores usando la función copy() en vector .
A continuación se muestra la implementación del enfoque anterior:
CPP
// C++ program for the above approach #include "bits/stdc++.h" using namespace std; // Function to slice a given vector // from range X to Y vector<int> slicing(vector<int>& arr, int X, int Y) { // Starting and Ending iterators auto start = arr.begin() + X; auto end = arr.begin() + Y + 1; // To store the sliced vector vector<int> result(Y - X + 1); // Copy vector using copy function() copy(start, end, result.begin()); // Return the final sliced vector return result; } // Function to print the vector ans void printResult(vector<int>& ans) { // Traverse the vector ans for (auto& it : ans) { // Print elements cout << it << ' '; } } // Driver Code int main() { // Given vector vector<int> arr = { 1, 3, 4, 2, 4, 2, 1 }; // Given range int X = 2, Y = 5; // Function Call vector<int> ans; ans = slicing(arr, X, Y); // Print the sliced vector printResult(ans); }
4 2 4 2
Método 2: el enfoque anterior se puede implementar utilizando Range Constructor. A continuación se muestra la implementación del enfoque anterior:
CPP
// C++ program for the above approach #include "bits/stdc++.h" using namespace std; // Template class to slice a vector // from range X to Y template <typename T> vector<T> slicing(vector<T> const& v, int X, int Y) { // Begin and End iterator auto first = v.begin() + X; auto last = v.begin() + Y + 1; // Copy the element vector<T> vector(first, last); // Return the results return vector; } // Template class to print the element // in vector v template <typename T> void printResult(vector<T> const& v) { // Traverse the vector v for (auto i : v) { cout << i << ' '; } cout << '\n'; } // Driver Code int main() { // Given vector vector<int> arr = { 1, 3, 4, 2, 4, 2, 1 }; // Given range int X = 2, Y = 5; // To store the sliced vector vector<int> ans; // Function Call ans = slicing(arr, X, Y); // Print the sliced vector printResult(ans); }
4 2 4 2
Método 3: También podemos usar la función incorporada slice() en C++ STL para dividir el vector dado. A continuación se muestra la implementación del enfoque anterior:
CPP
// C++ program for the above approach #include "bits/stdc++.h" #include "valarray" using namespace std; // Function to slice the given array // elements from range (X, Y) valarray<int> slicing(valarray<int> arr, int X, int Y) { // Return the slicing of array return arr[slice(X, Y - X + 1, 1)]; } // Print the resultant array // after slicing void printResult(valarray<int> v) { // Traverse the vector v for (auto i : v) { cout << i << ' '; } cout << '\n'; } // Driver Code int main() { // Given vector valarray<int> arr = { 1, 3, 4, 2, 4, 2, 1 }; // Given range int X = 2, Y = 5; // To store the sliced vector valarray<int> ans; // Function Call ans = slicing(arr, X, Y); // Print the sliced vector printResult(ans); }
4 2 4 2
Publicación traducida automáticamente
Artículo escrito por anmolsharmalbs y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA