Zip Mehrere Iteratoren in C ++

8

Unter Verwendung der Boost-Bibliothek ist es möglich, eine bekannte Anzahl von Iteratoren unter Verwendung eines zip iterator , aber was ist, wenn die Anzahl der zu komprimierenden Iteratoren bis zur Laufzeit nicht bekannt ist?

Um ein wenig zu erweitern, habe ich eine Liste von Listen, die alle die gleiche Größe haben, und ich muss alle Werte an jedem Index gruppieren und sie in eine andere Operation einspeisen. Im Moment ist das alles manuell und ich habe das Gefühl, dass es einen besseren Weg geben sollte.

Beispiel :

Sagen wir, ich habe 3 Listen:

  • [1, 2, 3, 4, 5]
  • [11, 12, 13, 14, 15]
  • [21, 22, 23, 24, 25]

Ich muss diese Listen in Folgendes umwandeln:

  • [1, 11, 12]
  • [2, 12, 22]
  • [3, 13, 23]
  • [4, 14, 24]
  • ... usw.

Ich weiß nicht, wie viele Listen bis zur Laufzeit in der Eingabe sind.

    
Chris Pitman 13.09.2011, 15:32
quelle

2 Antworten

4

Nachdem ich fast eine halbe Stunde damit verbracht habe, habe ich diese dynamic_zip_iterator -Klasse entwickelt, die weiter verbessert werden kann, damit sie wie STL-ähnliche Iteratoren aussieht. Ab sofort ist es sehr spezifisch, da ich std::list fest codiert habe, was du durch std::vector ersetzen kannst oder noch generischer machen kannst:

Wie auch immer, schaut es euch an:

%Vor%

Damit reduziert sich Ihr Problem auf diese Funktion:

%Vor%

Testcode:

%Vor%

Ausgabe:

%Vor%

Online-Demo: Ссылка

    
Nawaz 13.09.2011, 17:40
quelle
2

Ich bin mir ziemlich sicher, dass es dafür heute nichts gibt. Aber warum nicht eine sehr einfache Liste von Iterator-Elementen erstellen? Das würde den Trick bringen, da bin ich mir sicher!

Erstellen Sie eine Funktion für alle 3 Teile der for -Anweisung - & gt; beginnen, enden, erhöhen

Und das sollte genug sein! Ein bisschen mehr Details unten.

  • begin: (const ref zur Liste der Listen, Verweis auf die leere Liste der Iteratoren) - & gt; Konstruiere die Iteratorliste mit begin () für jede Unterliste

  • end: (const ref zur Liste der Iteratoren, const ref zur Liste der Listen) - & gt; Wahr, wenn ein Iterator am Ende seiner Liste steht

  • increment: (Verweis auf die Liste der Iteratoren) - & gt; Inkrementiere jeden Iterator in der Liste

Benoît 13.09.2011 15:45
quelle

Tags und Links