C 11 中用於模擬同時循環的Zip 函數
C 11 中引入基於範圍的for 循環簡化了中元素的循環一個容器。然而,問題是是否可以複製 Python zip 函數的功能,它允許同時循環多個序列。
解
有幾種方法可以實現使用Boost 函式庫:
方法1:Boost 組合(Boost 1.56.0及更高版本)
Boost 1.56.0 引進了boost::combine 函數。它允許將不同類型的多個容器組合到一個範圍中:
#include <boost> 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 <p>此程式碼將輸出:</p> <pre class="brush:php;toolbar:false">1 a 2 b 3 c
方法2:Boost Zip Iterator(早期的Boost 版本)
在Boost 1.56.0 之前, boost::zip_iterator 和 boost::range 函式庫可用於實現自訂 zip 範圍:
#include <boost> #include <boost> 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); }</typename...></boost></boost>
用法保持不變:
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 </char></int>
以上是如何使用 Boost 在 C 11 中模擬 Python 的 Zip 函數以實現同步循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!