为了删除代码中的手动逻辑,我使用了这个结构:
std::ranges::drop_view a { std::ranges::take_view(my_range, my_range.size() -X), Y};
带有我在运行时传递的X和Y值。
即使我检查了算法,我也找不到具有以下约束的更短的方法:
- 不要超过或低于我想要的范围,如果范围有0个元素,不要做任何事情->没有溢出
- 非拥有->没有副本
ranges::subranges不符合这些要求。
感谢你可以组成take_view
drop_view
到一个新的适配器
auto take_and_drop = [](auto n, auto m) {
return std::views::take(n) | std::views::drop(m);
};
auto a = my_range | take_and_drop(my_range.size() - X, Y);