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,然后遍历它.我也不想这样做,因为这意味着昂贵的复制操作.
使用range-v3,您可以在C++ 17或更早版本中找到与范围相关的所有内容:
for (int i : view::concat(a, b)) {
std::cout << i << ' ';
}
Run Code Online (Sandbox Code Playgroud)