使用 range::views::chunk_by 时可以引用当前子范围吗?

Sun*_*Lim 2 c++ std-ranges

我得到了一个随机整数向量v,并希望按照以下标准分成子范围:

  1. 子范围中的整数应该是连续的并且加 1(易于检查)
  2. 子范围的大小不应大于 4(这很难)
auto result = v | ranges::views::chunk_by([](int a, int b) {
 return a + 1 == b /* && size of current chunk < 4 */;
});
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?有没有仍然使用ranges库的替代方法?

康桓瑋*_*康桓瑋 5

您可以使用 views::transform应用于views::chunk(4)每个子范围,然后加入它们:

  auto result = v | std::views::chunk_by([](int a, int b) {
    return a + 1 == b /* && size of current chunk < 4 */;
  }) 
    | std::views::transform(std::views::chunk(4))
    | std::views::join;
Run Code Online (Sandbox Code Playgroud)

演示