Slicing a Vector in C++ - GeeksforGeeks

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 = 5Output: 4 2 4 2Input: 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.  
Get the starting iterator of element at index X as:  
Get the starting iterator of element at index X as:  
auto start = arr.begin() + X
 Get the ending iterator of element at index Y as:  
 
Get the ending iterator of element at index Y as:  
auto end = arr.begin() + Y + 1
 Copy the elements in these range between these iterators using copy() function in vector.
 
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<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 ansvoid printResult(vector<int>& ans){     // Traverse the vector ans    for (auto& it : ans) {         // Print elements        cout << it << ' ';    }} // Driver Codeint 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
 
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 <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 vtemplate <typename T>void printResult(vector<T> const& v){     // Traverse the vector v    for (auto i : v) {        cout << i << ' ';    }    cout << '\n';} // Driver Codeint 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
 
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<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 slicingvoid printResult(valarray<int> v){     // Traverse the vector v    for (auto i : v) {        cout << i << ' ';    }    cout << '\n';} // Driver Codeint 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
 
muheeth17
cpp-vector
Arrays
Articles
C++
C++ Programs
Arrays
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Stack Data Structure (Introduction and Program)
Introduction to Arrays
Multidimensional Arrays in Java
Tree Traversals (Inorder, Preorder and Postorder)
SQL | Join (Inner, Left, Right and Full Joins)
find command in Linux with examples
How to write a Pseudo Code?
Analysis of Algorithms | Set 1 (Asymptotic Analysis)