先决条件: 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
方法一:思路是把这个范围X到Y的元素复制到一个新的vector中,并返回。
- 获取索引 X 处元素的起始迭代器为:
auto start = arr.begin() + X
- 获取索引 Y 处元素的结束迭代器为:
auto end = arr.begin() + Y + 1
- 使用向量中的 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
方法二:上述方法可以使用Range Constructor来实现。下面是上述方法的实现:
// 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++ 和C++ STL 课程,了解语言和 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程。