在C++中,是否可以在单个循环中顺序迭代多个迭代器
Is it possible in C++ to iterate over multiple iterators in a single loop sequentially?
我知道,如果我使用一个实现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);
}
}
相关文章:
- 顺序容器和迭代器算术
- 在C++中,是否可以在单个循环中顺序迭代多个迭代器
- 基于 C++ 范围的 std::vector 迭代的顺序
- 有没有办法在不使用任何迭代的情况下将字符的字母顺序排列
- 使用 boost::filesystem 迭代目录时可以更改文件的顺序吗?
- 确定设置迭代器的顺序
- 如何按顺序迭代几个容器
- QDiriterator迭代顺序
- 二进制搜索树中按顺序遍历的复杂性(使用迭代器)
- 迭代器是否以相同的顺序迭代 boost::unordered_set 或 boost::unordered_map 只要集合不变?
- unordered_map同一键的迭代顺序
- 是STL RBTree顺序迭代O(N ln N)
- std::unordered_set元素的迭代顺序保证始终相同
- 如何编写一个迭代器包装器来组合底层迭代器中的顺序值组
- 按排序顺序迭代 std::vector
- 是否可以按值顺序迭代映射
- 以相反的顺序迭代可变模板参数
- 使用自定义顺序迭代boost multi_index
- 如何按照我自己的顺序/它们被插入的顺序迭代std::map值
- 排序的数据结构,用于按顺序迭代、有序推送和删除(仅从顶部开始 N 个元素)