c++ - 有没有办法在不使用两个 for 循环的情况下迭代两个容器
问题描述
有没有办法在不使用两个 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
(当然它不起作用。解释在这个答案中)
我不想编写两个 for 循环并在循环内复制代码。有没有一种方法可以迭代,a
然后b
使用一个 for 循环?
我唯一能想到的是将第二个容器复制/移动到第一个容器,或者创建一个结合a
and的新向量b
,然后对其进行迭代。我也不想这样做,因为这将意味着昂贵的复制操作。
解决方案
使用range-v3,您可以在 C++17 或更早版本中使用范围相关的所有内容:
for (int i : view::concat(a, b)) {
std::cout << i << ' ';
}
推荐阅读
- python - 错误:找不到满足 PyDispatcher-2.0.5 要求的版本(来自版本:无)
- c++ - 如何使用 UINT64_MAX 标准库宏?
- ethereum - 单元测试无法与 chai ethereum 一起正常工作
- javascript - JS中的电话号码输入掩码
- python - 如何从字典中在 networkx 中创建有向图?
- javascript - node.js 异步;计算回调
- python - 使用替换来修改字符串的字符串列表
- kotlin - JetPack Compose - 一种呈现列表列表和观察变化的方法
- discord.js - 如何修复 CLIENT_MISSING_INTENTS 错误(Discord.js)
- rest - ASP.NET Core Web API - PUT 与 PATCH