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

How to iterate over c++ vector and operate on two values at a time using the range-v3 library?

假设我有一个数字向量:

std::vector< int > v{ 1, 2, 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 的库中,这称为滑动视图 (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';
}

我认为 C++20 中并未立即包含此特定视图,但我相信它很有可能在未来出现。不幸的是,zip_view had to be cut from P1035,因此通过 zip 的 "canonical" 实现(压缩范围本身减去第一个元素)可能也会涉及更多。