假设我有一个数字 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/