提取向量的向量子集

Aka*_*ari 0 c++ vector subset

我知道如何从法向量中提取子集,以及如何从另一个向量内的向量中提取子集。我现在的问题是如何提取另一个向量内的所有向量的子集。

例如:我在另一个向量中有三个向量:

std::vector<std::vector<int>> my_vec;
std::vector<int> vec_1{1,2,3,4,5};
std::vector<int> vec_2{11,12,13,14,15};
std::vector<int> vec_3{21,22,23,24,25};

my_vec.push_back(vec_1);
my_vec.push_back(vec_2);
my_vec.push_back(vec_3);
Run Code Online (Sandbox Code Playgroud)

我现在想做的是创建一个新向量,其中包含每个向量的第三个和第四个元素的子集。我试过这个:

#include<vector>
#include <iostream>

int main()
{
std::vector<std::vector<int>> my_vec;
std::vector<int> vec_1{1,2,3,4,5};
std::vector<int> vec_2{11,12,13,14,15};
std::vector<int> vec_3{21,22,23,24,25};

my_vec.push_back(vec_1);
my_vec.push_back(vec_2);
my_vec.push_back(vec_3);

// For a normal vector
std::vector<int> vec_1_subset(vec_1.begin()+2,vec_1.begin()+4);

for (auto& element: vec_1_subset)
{
std::cout<<element<<std::endl;
}

// For extracting from a single vector inside another vector
std::vector<int> my_vec_subset((my_vec[0]).begin()+2,(my_vec[0]).begin()+4);

for (auto& element: my_vec_subset)
{
std::cout<<element<<std::endl;
}

// For several vectors inside a vector ?
std::vector<std::vector<int>> my_vec_test_subset(my_vec.begin()+2,my_vec.begin()+4);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

最后一次尝试创建一条错误消息。

Jar*_*d42 5

您可能会执行以下操作:

std::vector<std::vector<int>> res;
res.reserve(my_vec.size());

std::transform(my_vec.begin(), my_vec.end(),
               std::back_inserter(res),
               [](const std::vector<int>& v){ return std::vector<int>{v.begin() + 2,
                                                                      v.begin() + 4}; });
Run Code Online (Sandbox Code Playgroud)