C++23 新特性:ranges::contains 与 ranges::contains_subrange

举报
码事漫谈 发表于 2025/05/15 18:26:38 2025/05/15
【摘要】 ranges::contains ranges::contains_subrange 编译器支持 总结C++23 标准带来了许多令人兴奋的新特性,其中就包括了 ranges::contains 和 ranges::contains_subrange 这两个算法。这两个算法由提案 P2302R4 提出,它们为 C++ 程序员提供了更加丰富和灵活的范围操作能力。 ranges::contain...

C++23 标准带来了许多令人兴奋的新特性,其中就包括了 ranges::containsranges::contains_subrange 这两个算法。这两个算法由提案 P2302R4 提出,它们为 C++ 程序员提供了更加丰富和灵活的范围操作能力。

ranges::contains

ranges::contains 算法用于检查一个范围内是否包含指定的值。它属于 <algorithm> 头文件,是范围库(Ranges Library)的一部分,提供更简洁、安全的范围操作。该算法的声明如下:

template< std::input_iterator I, std::sentinel_for<I> S, class T, class Proj = std::identity >
requires std::indirect_binary_predicate< ranges::equal_to, std::projected<I, Proj>, const T*>
constexpr bool contains(I first, S last, const T& value, Proj proj = {});

这个算法接受两个迭代器(或一个范围)和一个要查找的值,然后返回一个布尔值,指示该值是否存在于给定的范围内。

ranges::contains_subrange

ranges::contains_subrange 算法则用于检查一个范围内是否包含另一个范围作为子范围。这个算法同样属于 <algorithm> 头文件,是范围库的一部分。其声明如下:

template< std::forward_iterator I1, std::sentinel_for<I1> S1, std::forward_iterator I2, std::sentinel_for<I2> S2, class Pred = ranges::equal_to, class Proj1 = std::identity, class Proj2 = std::identity >
requires std::indirectly_comparable<I1, I2, Pred, Proj1, Proj2>
constexpr bool contains_subrange(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {});

这个算法接受两个范围和可选的谓词函数,然后返回一个布尔值,指示第一个范围是否包含第二个范围作为子范围。

编译器支持

根据搜索结果,GCC 13 版本开始支持这两个算法。这意味着如果你正在使用支持 C++23 的编译器,现在就可以开始使用这些新特性了。

总结

ranges::containsranges::contains_subrange 是 C++23 中非常有用的特性,它们扩展了 C++ 范围库的功能,使得对范围的操作更加直观和方便。随着编译器对 C++23 标准的逐步支持,这些新特性将为 C++ 程序员提供更多的便利和灵活性。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。