C++23 中的 ranges::starts_with 与 ranges::ends_with

举报
码事漫谈 发表于 2025/05/14 18:51:12 2025/05/14
【摘要】 功能介绍 ranges::starts_with ranges::ends_with 示例代码 编译器支持 总结C++23 标准引入了 ranges::starts_with 和 ranges::ends_with,这两个算法由提案 P1659R3 提出,旨在为任意范围提供检查前缀和后缀的功能。 功能介绍 ranges::starts_withranges::starts_with 用于检...

C++23 标准引入了 ranges::starts_withranges::ends_with,这两个算法由提案 P1659R3 提出,旨在为任意范围提供检查前缀和后缀的功能。

功能介绍

ranges::starts_with

ranges::starts_with 用于检查一个范围是否以另一个范围作为前缀。它提供了两种重载形式:

  • 基于迭代器的版本,允许用户指定范围的起始和结束迭代器。
  • 基于范围的版本,直接接受两个范围作为参数。

其模板参数包括输入迭代器、哨兵、可选的比较器和投影函数。比较器和投影函数的默认实现分别是 ranges::equal_toidentity

ranges::ends_with

ranges::ends_with 用于检查一个范围是否以另一个范围作为后缀。它的重载形式和参数与 ranges::starts_with 类似,但对迭代器和范围的要求略有不同。例如,它要求至少有一个范围是正向迭代器或具有大小的哨兵。

示例代码

以下是一些使用 ranges::starts_withranges::ends_with 的示例:

#include <ranges>
#include <iostream>
#include <array>

int main() {
    // 字符串范围
    std::string s = "static_cast";
    std::string prefix = "static";
    std::string suffix = "cast";

    std::cout << std::boolalpha;
    std::cout << "Does 'static_cast' start with 'static'? " 
              << std::ranges::starts_with(s, prefix) << '\n';
    std::cout << "Does 'static_cast' end with 'cast'? " 
              << std::ranges::ends_with(s, suffix) << '\n';

    // 数组范围
    std::array<int, 5> arr1 = {1, 2, 3, 4, 5};
    std::array<int, 2> arr2 = {4, 5};

    std::cout << "Does {1, 2, 3, 4, 5} end with {4, 5}? " 
              << std::ranges::ends_with(arr1, arr2) << '\n';

    return 0;
}

编译器支持

截至2024年2月,ranges::starts_withranges::ends_with 在一些主流编译器中的支持情况如下:

  • GCC:从版本 9.0 开始支持。
  • Clang:从版本 9 开始支持。
  • Visual Studio:从 2019 16.1 版本开始支持。

总结

ranges::starts_withranges::ends_with 是 C++23 标准中非常实用的算法,它们扩展了对范围操作的支持,允许开发者更方便地检查范围的前缀和后缀。这些算法不仅适用于字符串,还适用于任意满足输入范围要求的类型。随着编译器对 C++23 标准的逐步支持,开发者可以开始在项目中使用这些新特性,以提高代码的可读性和效率。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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