Heim >Backend-Entwicklung >C++ >Wie können wir die Zip-Funktionalität von Python für die gleichzeitige Iteration in C 11 erreichen?
Zip-Funktion für sequentielle Iteration in C 11
Mit der Einführung bereichsbasierter For-Schleifen in C 11 wurde das Schleifen über Sequenzen eingeführt prägnanter werden. Das gleichzeitige Durchlaufen mehrerer Sequenzen stellt jedoch eine Herausforderung dar. In diesem Artikel werden Lösungen für die Integration von Zip-Funktionen in C 11-Codes untersucht.
Die Zip-Funktion von Python bietet eine praktische Möglichkeit, mehrere Listen gleichzeitig zu durchlaufen und Elemente aus jeder Liste zu paaren. Können wir ein ähnliches Verhalten mit neuen C 11-Funktionen erreichen?
Boosts Combine- und Zip-Iteratoren
Ab Boost 1.56.0 ist die Funktion boost::combine verfügbar um mehrere Bereiche zu einem einzigen Tupelbereich zu kombinieren. Jedes Tupelelement entspricht dem Wert an der aktuellen Position in den jeweiligen Bereichen.
#include <boost/range/combine.hpp> #include <vector> #include <list> int main() { std::vector<int> a {4, 5, 6}; double b[] = {7, 8, 9}; std::list<std::string> c {"a", "b", "c"}; for (auto tup : boost::combine(a, b, c)) { int x; double y; std::string z; boost::tie(x, y, z) = tup; printf("%d %g %s\n", x, y, z.c_str()); } }
Boost stellt zu diesem Zweck auch boost::zip_iterator zur Verfügung. In früheren Boost-Versionen kann eine benutzerdefinierte Zip-Funktion definiert werden, um eine Reihe von Tupeln zu erstellen.
#include <boost/iterator/zip_iterator.hpp> #include <boost/range.hpp> template <typename... T> auto zip(T&&... containers) -> boost::iterator_range<boost::zip_iterator<decltype(boost::make_tuple(std::begin(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); }
Mit diesen Methoden können wir effektiv über mehrere Sequenzen gleichzeitig iterieren und so zip-ähnliche Funktionen in C 11-Codes ermöglichen .
Das obige ist der detaillierte Inhalt vonWie können wir die Zip-Funktionalität von Python für die gleichzeitige Iteration in C 11 erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!