我想将范围拆分为 <任何大小{1, 2, 3, 4, 5}
>的子范围范围(例如,大小为 2: )。然而仅按分隔符拆分。{{1, 2}, {3, 4}, {5}}
std::views::split
是否没有标准的“反向连接”或这样做的东西?
我想将范围拆分为 <任何大小{1, 2, 3, 4, 5}
>的子范围范围(例如,大小为 2: )。然而仅按分隔符拆分。{{1, 2}, {3, 4}, {5}}
std::views::split
是否没有标准的“反向连接”或这样做的东西?
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,等等。