c++ - 在容器( vector )上以循环方式循环的最佳方法是什么?

标签 c++ boost

我需要以循环方式在容器上循环,这样对于每次迭代,我都可以访问当前元素和上一个元素。对于第一次迭代,前一个元素应该是容器的 back 元素。

这个例子是这样做的:

#include <vector>
#include <iostream>

using namespace std;

int main(int argc, const char *argv[])
{
    vector<int> v = {0,1,2,3,4,5,6}; 

    auto xPreviousIt = v.end(); 
    --xPreviousIt; 

    int i = 0; 
    for (auto xCurrent : v)
    {
        cout << xCurrent <<  "  " << *xPreviousIt << endl; 
        xPreviousIt = v.begin() + i;  
        ++i; 
    }

    return 0;
}

但我想知道是否有更好的方法来实现这样的目标?就像一个循环迭代器,它从容器的开头开始,也在那里结束?我在 boost 中只能找到 circular buffer .

最佳答案

使用普通的for循环更简单。例如,如果 init 是起始索引,那么您可以这样写

for ( std::vector<int>::size_type i = 0; i < v.size(); i++ )
{
   std::cout << v[( init + i ) % v.size()] << ' ';
}

std::cout << std::endl;

关于c++ - 在容器( vector )上以循环方式循环的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389826/

相关文章:

c++ - 使用 boost 保存 xml 时省略 xml 声明

c++ - Boost MultiArray 复制构造函数

c++ - spirit :不能在其规则定义中使用 x3::skip(skipper)[一些递归规则]

c++ - 如何使用 boost::simple_segregated_storage?

C++结构对象调用一个函数

c++ - 用 C++ 中的文件指针替换 stdout 和 stdin?

c++ - boost::asio:发送到套接字的数据排序

c++ - 如何使用 select() 和 gRPC 创建服务器?

c++ - openssl 和 linux bash 计算之间的 MD5 不匹配

c++ - 编译非常简单的 boost::spirit 语法时出错