# Slicing a Vector in C++

• Difficulty Level : Medium
• Last Updated : 19 Jul, 2021

Pre-requisite: Vectors in C++
Slicing a vector means to make a subvector from a given vector.
Given N integers in a vector arr and to positive numbers X and Y, the task is to slice the given vector from index X to Y in a given vector.
Examples:

Input: vector arr = { 1, 3, 4, 2, 4, 2, 1 }, X = 2, Y = 5
Output: 4 2 4 2
Input: vector arr = { 1, 3, 4, 2 }, X = 1, Y = 2
Output: 3 4

Method 1: The idea is to copy the elements from this range X to Y to a new vector and return it.

1. Get the starting iterator of element at index X as:

auto start = arr.begin() + X
1.
2. Get the ending iterator of element at index Y as:

auto end = arr.begin() + Y + 1
1.
2. Copy the elements in these range between these iterators using copy() function in vector.

Below is the implementation of the above approach:

## CPP

 // C++ program for the above approach#include "bits/stdc++.h"using namespace std; // Function to slice a given vector// from range X to Yvector slicing(vector& 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 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 ansvoid printResult(vector& ans){     // Traverse the vector ans    for (auto& it : ans) {         // Print elements        cout << it << ' ';    }} // Driver Codeint main(){     // Given vector    vector arr = { 1, 3, 4, 2,                        4, 2, 1 };     // Given range    int X = 2, Y = 5;     // Function Call    vector ans;    ans = slicing(arr, X, Y);     // Print the sliced vector    printResult(ans);}

Output:

4 2 4 2

Method 2: The above approach can be implemented using Range Constructor. Below is the implementation of the above approach:

## CPP

 // C++ program for the above approach#include "bits/stdc++.h"using namespace std; // Template class to slice a vector// from range X to Ytemplate vector slicing(vector 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 vector(first, last);     // Return the results    return vector;} // Template class to print the element// in vector vtemplate void printResult(vector const& v){     // Traverse the vector v    for (auto i : v) {        cout << i << ' ';    }    cout << '\n';} // Driver Codeint main(){     // Given vector    vector arr = { 1, 3, 4, 2,                        4, 2, 1 };     // Given range    int X = 2, Y = 5;     // To store the sliced vector    vector ans;     // Function Call    ans = slicing(arr, X, Y);     // Print the sliced vector    printResult(ans);}

Output:

4 2 4 2

Method 3: We can also use inbuilt function slice() in C++ STL to slice the given vector. Below is the implementation of the above approach:

## 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 slicing(valarray arr,                      int X, int Y){     // Return the slicing of array    return arr[slice(X, Y - X + 1, 1)];} // Print the resultant array// after slicingvoid printResult(valarray v){     // Traverse the vector v    for (auto i : v) {        cout << i << ' ';    }    cout << '\n';} // Driver Codeint main(){     // Given vector    valarray arr = { 1, 3, 4, 2,                          4, 2, 1 };     // Given range    int X = 2, Y = 5;     // To store the sliced vector    valarray ans;     // Function Call    ans = slicing(arr, X, Y);     // Print the sliced vector    printResult(ans);}

Output:

4 2 4 2

My Personal Notes arrow_drop_up