微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++20 范围是否具有过滤器或 any_of 的值非谓词版本?

如何解决C++20 范围是否具有过滤器或 any_of 的值非谓词版本?

经典 C++ 有时为谓词算法选择 _if 后缀(而不是取值的算法),例如find_if/find count_if/count 有时它会 not(例如 any_of 虽然它需要谓词但没有 _if 后缀,并且没有算法的 any_of 值版本)。

据我所知,C++20 filterranges::any_of 没有值重载。

我浏览了 C++20 的整个 cppreference 页面并没有发现任何东西,我认为这只是因为 C++20 范围库非常有限(只有很少的视图)并且它与现有功能匹配(在 { 的情况下) {1}})。

我最好的尝试是包装逻辑并给它一个名称

any_of

解决方法

C++20 范围是否具有过滤器或 any_of 的值(非谓词)版本?

没有

但是写起来很容易:

std::ranges::any_of(r,[&](auto const& e){ return e == value; })

或者,如果认为时间太长,您可以添加一个助手:

inline constexpr auto equals = [](auto const& value){
    return [=](auto const& e){ return e == value; };
};

您可以使用它来缩短 any_of 调用:

std::ranges::any_of(r,equals(value));

或者您可以使用任意数量的库来编写占位符-lambda,最近使用的是Boost.Lambda2

std::ranges::any_of(r,_1 == value);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。