📜  在C++中切片矢量

📅  最后修改于: 2021-05-19 18:28:15             🧑  作者: Mango

先决条件: C++中的向量

切片向量意味着从给定向量制作子向量。
给定向量arr中的N个整数,并使其分别为正数X和Y ,任务是将给定向量从索引X切到给定向量中的Y。

例子:

方法1:想法是将元素从X到Y的范围复制到一个新的向量并将其返回。

  1. 获取索引X处元素的起始迭代器:
    auto start = arr.begin() + X
    
  2. 获取索引Y处元素的结尾迭代器,如下所示:
    auto end = arr.begin() + Y + 1
    
  3. 使用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等的更多准备工作,请参阅“完整面试准备课程”