在C++中,是否可以在单个循环中顺序迭代多个迭代器

Is it possible in C++ to iterate over multiple iterators in a single loop sequentially?

本文关键字:顺序 迭代 迭代器 循环 C++ 是否 单个      更新时间:2023-10-16

我知道,如果我使用一个实现iterator接口(提供begin()end()函数(的c++容器,我可以使用这样的for循环来迭代它:

for (auto element : container) {
process(element);
}

如果我有两个相同类型容器的实例,我可以编写这样的代码

for (auto element : container1) {
process(element);
}
for (auto element : container2) {
process(element);
}

然而,这会导致代码重复。我正在寻找一种方法来组合这两个容器,这样我就可以一次迭代它们(即让for循环迭代第一个容器,然后继续迭代第二个容器(。类似这样的东西:

for (auto element : container1 + container2) {
process(element);
}

我知道,如果它们恰好是向量,我可以使用container1.insert(container1.end(), container2.begin(), container2.end());之类的东西来连接它们,但我希望能够更普遍地、原位地、用一行代码来连接,并且不修改任何一个容器。

如果不使用某种迭代器适配器,您只需创建一个指向所有容器的指针/引用数组,然后循环,运行内部循环来迭代当前容器的元素:

auto* containers[] = {&container1, &container2};
for (auto *container : containers) {
for (auto &element : *container) {
process(element);
}
}