为了删除代码中的手动逻辑,我使用了该构造:
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);
关于C++:具有相同要求的此范围 View 构造的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72868191/