如何从 C 字符串获取 C++20forward_range 而不计算其长度?

Hol*_*Cat 5 c++ std-ranges

我有一个 C 字符串 ( const char *),我想将其转换为 C++20 范围 (a forward_range) 以对其应用一些标准算法。

我不想使用,std::string_view因为我不想计算它的长度(字符串可以很长,我只关心前几个字符)。幸运的是,aforward_range不需要提前知道它的长度。

我该怎么做呢?我可以编写一个自定义迭代器,但希望有一种更简单的方法。

康桓瑋*_*康桓瑋 6

我可以编写一个自定义迭代器,但希望有一种更简单的方法。

相反,您可以为空终止字节字符串编写自定义哨兵类型

struct ntbs_sentinel {
  constexpr bool operator==(const char* s) const {
    return *s == '\0';
  }
};

const char* s = /* */;
std::ranges::contiguous_range auto r = std::ranges::subrange(s, ntbs_sentinel{});
Run Code Online (Sandbox Code Playgroud)