c++ - 使用 foreach 循环连续迭代两个结构的简单方法

标签 c++ c++11 iterator c++17

有没有一种简单的方法可以在 c++17 中实现这种设计模式?

std::set<uint32_t> first;
std::set<uint32_t> second;

for (uint32_t number : JoinIterator<uint32_t>(first, second)) {
   <DO SOMETHING WITH number>
}

这将替换以下代码:
std::set<uint32_t> first;
std::set<uint32_t> second;

for (uint32_t number : first) {
   <DO SOMETHING WITH number>
}

for (uint32_t number : second) {
   <DO SOMETHING WITH number>
}

我发现的所有搜索结果都是关于并行循环遍历两个结构,而不是连续循环遍历结构。

最佳答案

使用 views::concat来自 range-v3 :

for (uint32_t number : views::concat(first, second)) {
   <DO SOMETHING WITH number>
}

这仅适用于具有相同基础类型的范围(在本例中为真)。

在 Boost(即 range-v2)中,这拼写为 boost::range::join(first, second) .

由于在 Boost 文档中没有直接显示,因此可以在 boost/range/join.hpp 中找到该函数。

关于c++ - 使用 foreach 循环连续迭代两个结构的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60552466/

相关文章:

c++ - std::list 迭代器:获取下一个元素

c++ - 返回值部分且确定性地变化

c++ - QT中小部件的当前大小

c++ - 限制C中的套接字上传速度

c++ - 在另一个类的移动构造函数中移动类(没有默认构造函数)

c++ - 元编程和 SFINAE/std::enable_if:无限模板递归

c++ - 在 SFINAE 中将 int 缩小为 bool,gcc 和 clang 之间的输出不同

c++ - 如何为三元运算符强制斩线?

c++ - 成员函数的 const 修饰符如何影响重载决议?

c++ - 这个合并排序代码有什么问题?