C++20:如何按大小分割范围?

我想将范围拆分{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有分块,Rust 有分块,Swift 有chunks(ofCount: n),D有分块,等等。


以上是C++20:如何按大小分割范围?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>