C 11 中的壓縮序列
隨著C 11 中基於範圍的for 循環的引入,程式碼變得更加簡潔和可引入讀。然而,問題是它是否可以用來模擬 Python 的 zip 函數,該函數同時迭代多個集合。
增強 Zip 功能
雖然基於範圍的 for -loop不直接支援同時循環,Boost庫提供了zip_iterator。它允許使用者定義一個範圍,並行迭代多個容器中的元素。
Boost Zip_iterator 的使用
以下程式碼片段示範如何使用 boost:: zip_iterator:
#include <boost/iterator/zip_iterator.hpp> #include <vector> int main() { std::vector<int> a {1, 2, 3}; std::vector<std::string> b {"one", "two", "three"}; for (auto tup : boost::make_zip_iterator(boost::make_tuple(a.begin(), b.begin()))) { int x; std::string y; boost::tie(x, y) = tup; std::cout << x << " " << y << std::endl; } }
此程式碼將輸出:
1 one 2 two 3 three
警告:
需要注意的是,所有輸入容器的長度必須相等。否則,可能會出現未定義的行為。
替代品
除了 Boost 之外,還有為 C 提供 zip 功能的替代庫。例如,Ranges 函式庫提供了一個 zip_view,可以與基於範圍的 for 迴圈一起使用:
#include <ranges> int main() { std::vector<int> a {1, 2, 3}; std::vector<std::string> b {"one", "two", "three"}; for (auto [x, y] : std::ranges::zip_view(a, b)) { std::cout << x << " " << y << std::endl; } }
是否使用 Boost 或其他函式庫取決於特定要求和專案設定。
以上是如何使用 C 11 及更高版本模擬 Python 的 Zip 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!