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中文網其他相關文章!