# Slicing a Vector in C++

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 = 4
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
```
2. Get the ending iterator of element at index Y as:
```auto end = arr.begin() + Y + 1
```
3. Copy the elements in these range between these iterators using copy() function in vector.

Below is the implementation of the above approach:

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

Output:

```4 2 4 2
```

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

 `// 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 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 v ` `template` `<``typename` `T> ` `void` `printResult(vector ``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); ` `} `

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:

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

Output:

```4 2 4 2
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.