我有一个std::vector<Edge> edges
,我想使用std库将此数组中的一些项复制到std::vector<Edge*> outputs
中。
我知道std::copy_if
可以用来将一个指针向量复制到一个指针向量:
std::vector<Edge*> edges;
//setup edges
std::vector<Edge*> outputs;
std::copy_if(edges.cbegin(), edges.cend(), std::back_insert_iterator<decltype(outputs)>(outputs), [](auto edge) {
return true; //here should be some condition
});
但这样做是不可能:
std::vector<Edge> edges;
//setup edges
std::vector<Edge*> outputs;
std::copy_if(edges.cbegin(), edges.cend(), std::back_insert_iterator<decltype(outputs)>(outputs), [](auto edge) {
return true; //here should be some condition
});
我明白为什么不可能。
我的问题是:有什么算法能让我这么做吗?
1条答案
按热度按时间bvk5enib1#
您可以使用Eric Niebler的range-v3库:
Demo(https://godbolt.org/z/5Efh8Eh7j)
你不需要创建一个输出向量,你可以通过使用C20范围(
std::ranges::to
也将在C23的某个时候可用)。Demo(https://godbolt.org/z/GKjjob5bK)