ホームページ >バックエンド開発 >C++ >Boost を使用して C 11 で同時ループする Python の Zip 関数をシミュレートするにはどうすればよいですか?

Boost を使用して C 11 で同時ループする Python の Zip 関数をシミュレートするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-10 11:09:11485ブラウズ

How Can I Simulate Python's Zip Function for Simultaneous Looping in C  11 Using Boost?

C 11 で同時ループをシミュレートするための Zip 関数

C 11 での範囲ベースの for ループの導入により、要素のループが簡素化されます。コンテナ。ただし、複数のシーケンスを同時にループできる Python の zip 関数の機能を複製できるかどうかという疑問が生じます。

解決策

実現するにはいくつかのアプローチがあります。これは Boost ライブラリを使用しています:

アプローチ 1: Boost Combine (Boost 1.56.0 以降)

Boost 1.56.0 では boost::combine 関数が導入されました。異なるタイプの複数のコンテナを 1 つの範囲に結合できます:

#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&amp;&amp;... 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。