Cortar un vector en C++

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. 
 

  1. Obtenga el iterador inicial del elemento en el índice X como: 
     
auto start = arr.begin() + X
  1.  
  2. Obtenga el iterador final del elemento en el índice Y como: 
     
auto end = arr.begin() + Y + 1
  1.  
  2. 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);
}
Producción: 

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);
}
Producción: 

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);
}
Producción: 

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

Deja una respuesta

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