首頁 > 後端開發 > C++ > 如何使用 C 11 及更高版本模擬 Python 的 Zip 函數?

如何使用 C 11 及更高版本模擬 Python 的 Zip 函數?

DDD
發布: 2024-12-08 16:13:14
原創
390 人瀏覽過

How Can I Simulate Python's Zip Function Using C  11 and Beyond?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板