先决条件: C++中的向量
切片向量意味着从给定向量制作子向量。
给定向量arr中的N个整数,并使其分别为正数X和Y ,任务是将给定向量从索引X切到给定向量中的Y。
例子:
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
方法1:想法是将元素从X到Y的范围复制到一个新的向量并将其返回。
- 获取索引X处元素的起始迭代器:
auto start = arr.begin() + X
- 获取索引Y处元素的结尾迭代器,如下所示:
auto end = arr.begin() + Y + 1
- 使用vector中的copy()函数在这些迭代器之间复制这些范围内的元素。
下面是上述方法的实现:
// 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 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 ans
void printResult(vector& ans)
{
// Traverse the vector ans
for (auto& it : ans) {
// Print elements
cout << it << ' ';
}
}
// Driver Code
int 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);
}
输出:
4 2 4 2
方法2:可以使用范围构造器实现上述方法。下面是上述方法的实现:
// 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
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
void printResult(vector const& v)
{
// Traverse the vector v
for (auto i : v) {
cout << i << ' ';
}
cout << '\n';
}
// Driver Code
int 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);
}
输出:
4 2 4 2
方法3:我们还可以在C++ STL中使用内置函数slice()来切片给定的向量。下面是上述方法的实现:
// 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 slicing
void printResult(valarray v)
{
// Traverse the vector v
for (auto i : v) {
cout << i << ' ';
}
cout << '\n';
}
// Driver Code
int 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);
}
输出:
4 2 4 2
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。