Wie kann ich einen Iterator-Wrapper schreiben, der Gruppen sequenzieller Werte aus dem zugrunde liegenden Iterator kombiniert?

9

Betrachten Sie die folgende Reihenfolge:

%Vor%

Ich habe Eingabe-Iteratoren für diese Sequenz. Ich möchte diese Iteratoren in Iteratoren einschließen, die stattdessen die folgende Sequenz erzeugen:

%Vor%

Wenn es nicht klar ist, ist diese Sequenz eine Folge von aufeinanderfolgenden Paaren von aufeinanderfolgenden Elementen von der ursprünglichen. Während das Original 10 Elemente hat, hat dieses 5: jedes wird aus zwei von der ursprünglichen Sequenz erhalten.

Ich benutze Boost iterator_facade , um dies zu implementieren, und ich habe diesen falschen Versuch:

%Vor%

Ein Problem, mit dem ich konfrontiert bin, befindet sich in der mit A gekennzeichneten Zeile: Wenn der übergebene Iterator ein Enditerator ist, wird dies inkrementiert, was ich nicht kann.

Ein anderer ist auf der mit B markierten Zeile: Ich halte den zugrunde liegenden Iterator immer vor dem "aktuellen" Paar. Wenn der Iterator also das letzte Paar ist, wird der zugrunde liegende Iterator ein Enditerator sein und somit vergleichen true gegen ein Ende pairing_iterator.

Wenn der zugrundeliegende Iterator ein Vorwärts-Iterator war, konnte ich das Paar bei jeder Dereferenzierung einfach lesen und einfach zweimal auf Inkrement vorwärts gehen. Aber mit Eingabe-Iteratoren kann ich nur einmal lesen.

erfinde ich ein Rad neu, das irgendwo existiert? So etwas habe ich in Boost nicht gefunden, was mich ein wenig überrascht. Aber ich würde gerne eine fertige Lösung finden.

Wenn dieses Rad nicht schon draußen ist, wie kann ich es dann tatsächlich rollen lassen?

    
R. Martinho Fernandes 11.07.2012, 02:05
quelle

2 Antworten

1

Ich habe zwei Vorschläge, die Sie bereits im Chat abgeschossen haben, eine mit einer seltsamen, aber relativ sicheren Einschränkung, und eine mit einem hässlichen Workaround für die Einschränkung:

Erste Idee ist sehr einfach, erfordert aber vor jedem Fortschritt genau eine Dereferenz

%Vor%

Zweite Idee entfernt die genau eine Dereferenzierungseinschränkung, ist aber hässlich und seltsam:

%Vor%

Ich habe wahrscheinlich einige Fehler gemacht, aber hoffentlich reicht das aus, um die Konzepte darzustellen.

    
Mooing Duck 11.07.2012 03:24
quelle
-1
%Vor%

Zusätzliche Prüfungen wären erforderlich, um sicherzustellen, dass der Paarungs-Iterator nicht über das Ende einer ungeraden Liste hinausgeht.

    
bytemaster 03.08.2012 16:54
quelle

Tags und Links