C 11 中用于模拟同时循环的 Zip 函数
C 11 中引入基于范围的 for 循环简化了中元素的循环一个容器。然而,问题是是否可以复制 Python zip 函数的功能,它允许同时循环多个序列。
解决方案
有几种方法可以实现使用 Boost 库:
方法 1:Boost 组合 (Boost 1.56.0及更高版本)
Boost 1.56.0 引入了 boost::combine 函数。它允许将不同类型的多个容器组合到一个范围中:
#include <boost/range/combine.hpp> int main() { std::vector<int> a = {1, 2, 3}; std::vector<char> b = {'a', 'b', 'c'}; for (const auto& [x, y] : boost::combine(a, b)) { std::cout << x << " " << y << std::endl; } }
此代码将输出:
1 a 2 b 3 c
方法 2:Boost Zip Iterator(早期的 Boost 版本)
在 Boost 1.56.0 之前, boost::zip_iterator 和 boost::range 库可用于实现自定义 zip 范围:
#include <boost/iterator/zip_iterator.hpp> #include <boost/range.hpp> template <typename... T> auto zip(const T&&... containers) { auto zip_begin = boost::make_zip_iterator(boost::make_tuple(std::begin(containers)...)); auto zip_end = boost::make_zip_iterator(boost::make_tuple(std::end(containers)...)); return boost::make_iterator_range(zip_begin, zip_end); }
用法保持不变:
int main() { std::vector<int> a = {1, 2, 3}; std::vector<char> b = {'a', 'b', 'c'}; for (const auto& [x, y] : zip(a, b)) { std::cout << x << " " << y << std::endl; } }
以上是如何使用 Boost 在 C 11 中模拟 Python 的 Zip 函数以实现同步循环?的详细内容。更多信息请关注PHP中文网其他相关文章!