c++ - 通过按索引选择范围的元素来创建 View

标签 c++ range-v3

在 range-v3 中,是否有比使用 View 更有效的方法(更少的步骤、更清晰、更具表现力、更优雅、更高性能,...)通过通过范围的任意索引选择范围的元素来创建 View : :counted plus views::concat 如

auto v = std::vector<int> {6,7,8,9,10,11};
auto v1 = views::counted(ranges::begin(v) + 1, 1); // [7]
auto v2 = views::counted(ranges::begin(v) + 3, 1); // [9]
auto v3 = views::counted(ranges::begin(v) + 4, 1); // [10]
auto vFinal = views::concat(v1,v2,v3); // [7,9,10]

最佳答案

您可以结束对 ranges::views::concat 的调用。通过将索引放在一个范围内,然后调用 ranges::views::for_each它将每个元素映射到一个返回范围的函数,然后连接所有内容。

auto v = std::vector<int>{6,7,8,9,10,11};
auto i = std::vector<int>{1,3,4};
auto vFinal = i
    | ranges::views::for_each([&v](auto i) { return v | ranges::views::slice(i, i+1); });
https://godbolt.org/z/Wocb8W

关于c++ - 通过按索引选择范围的元素来创建 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64199584/

相关文章:

c++ - 你如何使用 range-v3 范围制作像 ranges::to<T>() 这样的可管道函数?

c++ - Mac 与 Windows:Eigen::Vector3f(0,0,0).normalized()

c++ - MPI 帮助找到 n 个数字的最大值

c++ - 如何在 c++20 约束算法中嵌套投影元素?

c++ - 使用 Ranges-V3 移除标记为移除的元素

c++ - 如何使用 range-v3 库从 std::vector 获取列 View 和行 View ?

c++ - 使用 ranges-v3 实现 DFS

c++ - Intel UHD 630 上的默认帧缓冲区未进行 Gamma 校正

c++ - 在 C++ 中声明大字符数组

c++ - CascadeClassifier.load() 仅在发布时出错