2

假设我有一个数字向量:

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

我想遍历向量并一次操作两个;也就是说,我要操作:

  • (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 库会使它更加优雅和可读。我只是不记得命令是什么。

4

1 回答 1

2

在 Eric Niebler 的库中,这被称为滑动视图(现场示例):

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 必须从 P1035 中删除,因此“规范”实现通过zip(用自身压缩范围减去第一个元素)可能也会涉及更多。

于 2020-03-17T00:49:27.310 回答