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/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&&... 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!