在 C 中同时迭代多个容器
C 11 提供了各种迭代容器的机制,包括基于范围的循环和“std” ::for_each' 函数。然而,问题出现了:迭代两个或多个相同大小的容器以执行类似于以下操作的推荐方法是什么:
for (unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = containerB[i]; }
在基于范围的循环中使用索引
有效的解决方案涉及使用基于范围的循环迭代容器的索引。这种方法提供了与经典 for 循环相同水平的效率。下面的代码片段举例说明了此方法:
for (unsigned i : indices(containerA)) { containerA[i] = containerB[i]; }
“indices”函数返回容器索引的延迟计算范围。它的实现可在 GitHub 上找到。
压缩容器
如果这种模式在您的数据中频繁出现,另一种方法是压缩容器,创建一系列元组其元素对应于配对元素:
for (auto& [a, b] : zip(containerA, containerB)) { a = b; }
'zip' 功能可以基于'indices' 函数。
这种方法还提供了高效的迭代,并且在某些情况下是更简洁和可读的解决方案。
以上是如何同时高效地迭代多个C容器?的详细内容。更多信息请关注PHP中文网其他相关文章!