有没有办法迭代两个容器而不使用两个for循环

Mat*_*hai 3 c++ c++11 c++14 c++17

有没有办法迭代两个容器(一个跟随另一个),而不使用两个for循环.

我的意图是做这样的事情

vector<int> a{ 1,2,3 };
vector<int> b{ 4,5,6 };

auto it = a.begin();
auto end = b.end();

for (; it != end; ++it)
{
    if (it == a.end())
    {
        it = b.begin();
    }
    // do something with *it
}
Run Code Online (Sandbox Code Playgroud)

打印

1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

(当然它不起作用.解释在这个答案中)

我不想写两个for循环并复制循环内的代码.有没有办法迭代a后跟b一个for循环?

我能想到的唯一的事情或者是拷贝/第二容器移动到第一或合并创建一个新的矢量a和b,然后遍历它.我也不想这样做,因为这意味着昂贵的复制操作.

Bar*_*rry 8

使用range-v3,您可以在C++ 17或更早版本中找到与范围相关的所有内容:

for (int i : view::concat(a, b)) {
    std::cout << i << ' ';
}
Run Code Online (Sandbox Code Playgroud)