【发布时间】:2019-06-17 13:46:16
【问题描述】:
有没有办法在不使用两个 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
}
打印
1 2 3 4 5 6
(当然不行,解释在这个answer)
我不想编写两个 for 循环并在循环内复制代码。
有没有办法用一个 for 循环遍历 a 后跟 b?
我唯一能想到的是将第二个容器复制/移动到第一个容器,或者创建一个结合a 和b 的新向量,然后对其进行迭代。我也不想这样做,因为这将意味着昂贵的复制操作。
【问题讨论】:
-
如何编写两个循环(或使用标准算法,如
std::for_each)并在将传递给所述算法的单个函数中实现重复的行为? -
@Fureeish 是的,这是可能的
-
有人愿意解释为什么这个问题被否决了吗?我做了研究,这不是家庭作业问题。
-
那么我会采用这种方法。强制将逻辑封闭在一个循环中会引入许多不必要的检查和难以阅读的代码噪音。喜欢简单而不是复杂,特别是如果行为和性能相同,或者就更简单的方法而言更好。