创建一个新的C++子向量

Creating a new C++ subvector?

本文关键字:C++ 向量 一个 创建      更新时间:2023-10-16

假设我有一个值为[1,2,3,4,5,6,7,8,9,10]的向量。我想创建一个新的向量,例如,引用[5,6,7,8]。我想这只是创建一个带有指针的向量的问题,还是我必须推送我需要的所有中间值?

std::vector的构造函数之一接受一个范围:

std::vector<int> v;
// Populate v.
for (int i = 1; i <= 10; i++) v.push_back(i);   
// Construct v1 from subrange in v.
std::vector<int> v1(v.begin() + 4, v.end() - 2);

这很容易用std::valarray而不是向量:

#include <valarray>
#include <iostream>
#include <iterator>
#include <algorithm>
int main() {
  const std::valarray<int> arr={0,1,2,3,4,5,6,7,8,9,10};
  const std::valarray<int>& slice = arr[std::slice(5, // start pos
                                                   4, // size
                                                   1  // stride
                                                  )];
}

它取valarray的一个"切片",比向量更一般。

对于一个向量,您可以使用构造函数来完成它,该构造函数使用两个迭代器:

const std::vector<int> arr={0,1,2,3,4,5,6,7,8,9,10};
std::vector<int> slice(arr.begin()+5, arr.begin()+9);

如果不想使用push_back,可以使用std::copy:

std::vector<int> subvector;
copy ( v1.begin() + 4, v1.begin() + 8, std::back_inserter(subvector) );

我会执行以下操作:

#include <vector>
#include <iostream>
using namespace std;
void printvec(vector<int>& v){
        for(int i = 0;i < v.size();i++){
                cout << v[i] << " ";
        }
        cout << endl;
}
int main(){
        vector<int> v;
        for(int i = 1;i <= 10;i++) v.push_back(i);
        printvec(v);
        vector<int> v2(v.begin()+4, v.end()-2);
        printvec(v2);
        return 0;
}

~