c++ - 如何使用 range-v3 库迭代 C++ vector 并一次对两个值进行操作?

标签 c++ range-v3

假设我有一个数字 vector :

std::vector< int > v{ 1, 2, 3, 4 };

我想迭代 vector 并一次对两个 vector 进行操作;也就是说,我想进行操作:

  • (1,2),
  • (2,3)
  • (3,4)

我知道有一种方法可以使用 Eric Neibler 的 range-v3 来做到这一点库(预计在 C++20 中),但我不记得命令的确切顺序。


我可以使用迭代器来做到这一点

for( auto begin = v.begin(); begin != (v.end()-1); begin++ ){
  // Do something with *begin and *(begin+1)
}

使用 range-v3 库将使它更加优雅和可读。我只是不记得命令是什么。

最佳答案

在 Eric Niebler 的库中,这称为滑动 View ( live example ):

using namespace ranges;
std::vector< int > v{ 1, 2, 3, 4 };

for (const auto& p : v | views::sliding(2)) {
    std::cout << p[0] << ' ' << p[1] << '\n';
}

我不认为这个特定的 View 包含在 C++20 中,但我相信它将来很有可能出现。不幸的是,zip_view had to be cut from P1035 ,因此通过 zip 的“规范”实现(用自身压缩范围减去第一个元素)可能也会涉及更多一些。

关于c++ - 如何使用 range-v3 库迭代 C++ vector 并一次对两个值进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60713651/

相关文章:

c++ - 使用 std::copy 将一个数组复制到另一个数组

c++ - 管道中 lambda 的意外生命周期

c++ - 如何使用 range-v3 创建 view_facade

c++ - STL/ranges 算法计算加权平均值

c++ - 如何使用静态 TexCoords 和动态顶点调用 glDrawElements

c++ - 我什么时候应该使用 std::any

c++ - 在头文件中声明全局常量对象

c++ - 算法能否与表达式模板兼容?

c++ - 将 char 数组传递给参数化构造函数失败

c++ - 如何将写入标准输出的数据保存到本地缓冲区