经典的C有时会为 predicate 算法选择_if后缀(相对于那些接受值的算法),例如find_if
/find
count_if
/count
,有时它会选择not(例如any_of
没有_if后缀,尽管它接受 predicate ,并且算法没有any_of
值版本)。
据我所知,C20 filter
或ranges::any_of
没有值重载。
我浏览了C +20的整个cppreference页面,没有发现任何东西,我认为这只是因为C++20范围库非常有限(只有少数视图),并且它匹配现有功能(在any_of
的情况下)。
我最好的尝试是 Package 逻辑并给予一个新名称。
template <typename Range, typename Value>
static bool contains(const Range& range, const Value& value)
{
return std::ranges::find(range, value) != range.end();
}
字符串
好消息:C++23有std::ranges::contains
1条答案
按热度按时间qfe3c7zg1#
C20范围是否有filter或any_of的值(非 predicate )版本?
不,C20没有。但它很容易编写:
字符串
值得庆幸的是,C++23确实引入了一个新的
ranges::contains
来使这变得更容易:型
或者,如果你认为这太长了,你可以添加一个助手:
型
您可以使用它来缩短
any_of
调用:型
或者你可以使用任意数量的库来编写占位符-das,最新的是Boost.Lambda2:
型