gav*_*n.d 4 c++ range c++20 std-ranges
我想将范围拆分{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}}
}
Run Code Online (Sandbox Code Playgroud)
对于跨语言的算法,这似乎是一个非常一致的名称选择。Python有分块,Rust 有分块,Swift 有chunks(ofCount: n)
,D有分块,等等。