Heim >Backend-Entwicklung >C++ >Wie kann ich die Zip-Funktion von Python für die gleichzeitige Schleife in C 11 mit Boost simulieren?

Wie kann ich die Zip-Funktion von Python für die gleichzeitige Schleife in C 11 mit Boost simulieren?

DDD
DDDOriginal
2024-12-10 11:09:11483Durchsuche

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

Zip-Funktion zur Simulation simultaner Schleifen in C 11

Die Einführung bereichsbasierter For-Schleifen in C 11 vereinfacht das Schleifen über Elemente in ein Behälter. Es stellt sich jedoch die Frage, ob es möglich ist, die Funktionalität der Zip-Funktion von Python zu replizieren, die das gleichzeitige Durchlaufen mehrerer Sequenzen ermöglicht.

Lösung

Es gibt mehrere Ansätze, die erreicht werden können Dies unter Verwendung von Boost-Bibliotheken:

Ansatz 1: Boost Combine (Boost 1.56.0 und Später)

Boost 1.56.0 führte die Funktion boost::combine ein. Es ermöglicht die Kombination mehrerer Container verschiedener Typen in einem einzigen Bereich:

#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;
    }
}

Dieser Code gibt Folgendes aus:

1 a
2 b
3 c

Ansatz 2: Boost Zip Iterator (frühere Boost-Versionen)

Vor Boost 1.56.0 können die Bibliotheken boost::zip_iterator und boost::range sein Wird verwendet, um einen benutzerdefinierten Zip-Bereich zu implementieren:

#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);
}

Die Verwendung bleibt gleich:

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;
    }
}

Das obige ist der detaillierte Inhalt vonWie kann ich die Zip-Funktion von Python für die gleichzeitige Schleife in C 11 mit Boost simulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn