如何解决C++20:如何按大小分割范围?
我想将范围 {1,2,3,4,5}
拆分为任意大小>的子范围范围(例如大小为 2:{{1,2},{3,4},{5}}
)。
然而 std::views::split
仅按分隔符分割。
有没有标准的“反向连接”或其他方法可以做到这一点?
解决方法
range-v3 调用此算法 chunk
。 C++20 中没有这样的范围适配器,但它是为同名 C++23 提议的集合的一部分。 For example:
#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,等等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。