有没有办法在 C++ 中一次迭代两个项目?

gxi*_*xiv 0 c++ loops for-loop stl stdvector

想象一下我有一个有序的 std::vectorA = {x1, x2, ..., xn}并且我想对每个后续的项目对执行操作,例如f(x1, x2); f(x2, x3); ... f(xn-1, xn); f(xn, x1)

我可以像平常一样迭代,同时跟踪前一项:

for (auto x : A) {
    ...
    f(previous_x, x);
    previous_x = x;
}

f(previous_x, first_x);
Run Code Online (Sandbox Code Playgroud)

但是有没有更好的方法来迭代这个向量呢?该语言中是否有可以简化此操作的功能?

尝试了提供的解决方案。它有效,但很想知道是否有更干净、更简洁的方法。

Vla*_*cow 6

给你

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

    for (std::vector<int>::size_type i = 0, n = std::size( v ); i < n; i++)
    {
        std::cout << v[i] + v[( i + 1 ) % n] << ' ';
    }
    std::cout << '\n';
Run Code Online (Sandbox Code Playgroud)

该代码片段的输出是

3 5 7 9 6
Run Code Online (Sandbox Code Playgroud)

您可以使用类似的方法。

在 for 循环之前,您可以检查向量是否至少包含两个元素。