C++:具有相同要求的此范围 View 构造的替代方案?

标签 c++ c++20 std-ranges

为了删除代码中的手动逻辑,我使用了该构造:

std::ranges::drop_view a { std::ranges::take_view(my_range, my_range.size() -X), Y};

使用我在运行时传递的 X 和 Y 值。

即使我检查了算法,我也找不到具有以下限制的较短方法:

  1. 不要超出或低于我想要的范围,如果范围有 0 个元素则不做任何事情 -> 没有溢出
  2. 非拥有 -> 无拷贝

ranges::subranges 不符合这些要求。

谢谢

最佳答案

您可以将take_viewdrop_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/

相关文章:

c++ - 如何为 C++ 重载解析和 SFINAE 编写正/负测试?

c++ - 对称传输不会阻止 C++20 协程的堆栈溢出

c++ - 你能用新的范围库压缩吗?

c++ - OpenGL - 加载具有多个纹理的对象

c++ - 找出用于编译可执行文件/DLL 的 Boost 版本

c++ - 函数在控制台中运行两次

c++ - 使用概念启用类模板的成员函数

c++ - 具有虚拟析构函数的池分配器

c++ - 如何在 C++20 范围内将投影与变换结合起来

C++20 std::ranges:范围适配器跳过每个第 n 个元素