5

我想将范围拆分为 <任何大小{1, 2, 3, 4, 5}>的子范围范围(例如,大小为 2: )。然而仅按分隔符拆分。{{1, 2}, {3, 4}, {5}}std::views::split

是否没有标准的“反向连接”或这样做的东西?

4

1 回答 1

5

range-v3 调用这个算法chunk。C++20 中没有这样的范围适配器,但它是为C++23提议的同名集合的一部分。例如

#include <vector>
#include <range/v3/view/chunk.hpp>
#include <fmt/format.h>
#include <fmt/ranges.h>

int main() {
    std::vector v = {1, 2, 3, 4, 5};
    fmt::print("{}\n", v | ranges::views::chunk(2)); // prints {{1, 2}, {3, 4}, {5}}
}

这似乎是该算法跨语言的一个相当一致的名称选择。Python 有chunked,Rust 有chunks,Swift 有chunks(ofCount: n),D 有chunks,等等。

于 2021-04-03T14:31:08.897 回答