同时迭代两个或多个容器的最佳方法是什么

新手上路,请多包涵

C++11 提供了多种迭代容器的方法。例如:

基于范围的循环

for(auto c : container) fun(c)

std::for_each

 for_each(container.begin(),container.end(),fun)

但是,推荐的方法是迭代两个(或更多)相同大小的容器以完成以下操作:

 for(unsigned i = 0; i < containerA.size(); ++i) {
  containerA[i] = containerB[i];
}

原文由 memecs 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
1 个回答

答案就在这里!…当 C++23 来临时。

 #include <algorithm>
#include <forward_list>
#include <ranges>
#include <array>
#include <iostream>

int main()
{
    auto foos = std::to_array({ 1, 2, 3, 4, 5  });
    auto woos = std::to_array({ 6, 7, 8, 9, 10 });

    auto fooswoos = std::views::zip(foos,woos);

    for(auto [foo, woo] : fooswoos) {
        woo += foo;
    }
    std::ranges::for_each(woos, [](const auto& e) { std::cout << e << '\n'; });

    return 0;
}

那么,发生了什么事?

我们正在构建一个特殊的“视图”。该视图允许我们将容器视为其他结构,而无需实际进行任何复制或类似的操作。使用 结构化绑定,我们可以在每次迭代中获取每个对齐元素的引用,并为它做任何我们想做的事情(并且安全地)

立即在编译器资源管理器中查看!

原文由 WillisM 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题