gpt4 book ai didi

c++ - C++ copy_if、transform 等的函数式版本

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:30 27 4
gpt4 key购买 nike

例如的非迭代器版本all_of 可以写成:

template <class Container, class UnaryPredicate>
bool all_of(Container s, UnaryPredicate f) {
return all_of(s.begin(), s.end(), f);
}

但我认为您不能对返回容器的算法做同样的事情?

template <class Container, class UnaryPredicate>
Container copy_if(Container, UnaryPredicate);

我最接近的实现是使用 vector 来保存中间结果,但由于缺乏任何方式为 vector 提供模板参数而绊倒了。有什么我想念的吗?

最佳答案

你应该使用 std::insert_iterator而不是使用 vector 来保存你的临时文件:

template <class Container, class UnaryPredicate>
Container copy_if(Container const& input, UnaryPredicate const& up) {
Container tmp;
std::copy_if(input.begin(), input.end(),
std::insert_iterator<Container>(tmp, tmp.begin()), up);
return tmp;
}

std::insert_iterator 需要你的容器有一个 insert() 方法,这不是 Container 的要求但同时要求 SequenceContainerAssociativeContainer (表不完整,但 [associative.reqmts] 需要它(表 102))。


如果你真的想使用一个 vector 并且你所有的Container都遵守Container概念,那么您可以使用以下方法访问它们的值类型:

typename Container::value_type

例如:

std::vector<typename Container::value_type>

关于c++ - C++ copy_if、transform 等的函数式版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36724819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com