Gleichzeitiges Iterieren über mehrere Container in C
C 11 bietet verschiedene Mechanismen zum Iterieren über Container, einschließlich bereichsbasierter Schleifen und der 'std ::for_each'-Funktion. Es stellt sich jedoch die Frage: Was ist der empfohlene Ansatz für die Iteration über zwei oder mehr Container gleicher Größe, um eine Aktion ähnlich der folgenden auszuführen:
for (unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = containerB[i]; }
Verwendung von Indizes mit einer bereichsbasierten Schleife
Eine effiziente Lösung besteht darin, mithilfe einer bereichsbasierten Schleife über die Indizes des Containers zu iterieren. Dieser Ansatz bietet die gleiche Effizienz wie eine klassische for-Schleife. Der folgende Codeausschnitt veranschaulicht diese Methode:
for (unsigned i : indices(containerA)) { containerA[i] = containerB[i]; }
Die Funktion „indices“ gibt einen verzögert ausgewerteten Bereich von Indizes für den Container zurück. Die Implementierung ist auf GitHub verfügbar.
Container komprimieren
Wenn dieses Muster in Ihren Daten häufig vorkommt, besteht ein alternativer Ansatz darin, die Container zu komprimieren und so eine Reihe von Tupeln zu erstellen deren Elemente den gepaarten Elementen entsprechen:
for (auto& [a, b] : zip(containerA, containerB)) { a = b; }
Die „Zip“-Funktion kann anhand der „Indizes“ einfach implementiert werden. Funktion.
Dieser Ansatz ermöglicht auch eine effiziente Iteration und ist in bestimmten Fällen eine prägnantere und lesbarere Lösung.
Das obige ist der detaillierte Inhalt vonWie kann man effizient über mehrere C-Container gleichzeitig iterieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!