当前位置: 首页 > news >正文

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

文章目录

    • 功能介绍
      • `ranges::starts_with`
      • `ranges::ends_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 标准的逐步支持,开发者可以开始在项目中使用这些新特性,以提高代码的可读性和效率。

相关文章:

  • 灰度图像和RGB图像在数据大小和编码处理方式差别
  • Sunsetting 创建 React App
  • 从lightrag的prompt到基于openai Structured Outputs 的优化实现思路
  • 数据库系统概论(八)SQL单表查询语言超详细讲解(附带例题表格对比带你一步步掌握)
  • 秒删node_modules[无废话版]
  • GPUGeek携手ComfyUI :低成本文生图的高效解决方案
  • 自由学习记录(60)
  • [操作系统] 策略模式进行日志模块设计
  • 新能源汽车三电质量护盾:蓝光三维扫描技术显身手
  • ultralytics中tasks.py---parse_model函数解析
  • VSCode python配置
  • 基于策略的强化学习方法之策略梯度(Policy Gradient)详解
  • Axure设计之轮播图——案例“一图一轮播”
  • LLM笔记(一)基本概念
  • Kotlin 协程实战:实现异步值加载委托,对值进行异步懒初始化
  • 【C++】模板(初阶)
  • 数据库字段唯一性修复指南:从设计缺陷到规范实现
  • 嵌入式设计模式基础--C语言的继承封装与多态
  • 基于Python的量化交易实盘部署与风险管理指南
  • Spark的基础介绍
  • 商务部新闻发言人就出口管制管控名单答记者问
  • 陈吉宁龚正黄莉新胡文容等在警示教育基地参观学习,出席深入贯彻中央八项规定精神学习教育交流会
  • 中保协发布《保险机构适老服务规范》,全面规范保险机构面向老年人提供服务的统一标准
  • 讲一个香港儿童的故事,《劏房的天空》获“周庄杯”特等奖
  • 高波︱忆陈昊:在中年之前离去
  • 沙县小吃中东首店在沙特首都利雅得开业,首天营业额超5万元