Heim >Backend-Entwicklung >C++ >Wie kann ich die Zip-Funktion von Python für die gleichzeitige Schleife in C 11 mit Boost simulieren?
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> 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>Dieser Code gibt Folgendes aus:</p> <pre class="brush:php;toolbar:false">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> #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>
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 </char></int>
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!