Ich versuche, einen Zwei-Durchlauf-Algorithmus zu schreiben, der einigen Legacy-Code enthält. Ich möchte einen bestimmten Container zweimal durchlaufen, einmal in der Reihenfolge und einmal in umgekehrter Reihenfolge. Offensichtlich war mein erster Gedanke, eine iterator
und eine reverse_iterator
zu verwenden, aber seltsamerweise sahen die Entwerfer der Behälterklasse, die ich benutze, nicht einen funktionierenden reverse_iterator
für den Behälter zu definieren (reverse_iterators
kann hier nicht dereferenziert werden wie iterators
sein kann). Ich habe bereits einen Algorithmus, der eine reverse_iterator
erfordert.C++ Reverse_iterator Alternativen
Mein Gedanke ist, den ersten Durchgang Iterator für den ersten Teil des Algorithmus zu verwenden, und als ich den Algorithmus push_front
die Elemente in einen neuen Behälter durchführen, dann durch die neuen Container laufen. Dies wird Speicher beanspruchen, der in meiner Anwendung nicht kritisch ist, aber ich frage mich: Gibt es sauberere Alternativen zu reverse_iterators
in C++, oder sollte ich mir die Zeit nehmen, meinen Algorithmus nur mit Forward iterators
zu überarbeiten?
Danke, es sieht so aus, als ob der Iterator bidirektional ist. Die Klasse verwendet tatsächlich 'std :: reverse_iterator', um ihren' reverse_iterator' zu implementieren, aber wenn ich versuche, sie zu verwenden und zu dereferenzieren, erhalte ich einen Compilerfehler. – Zeke
@Zeke: Sie müssen den Code, den Sie verwenden, und die genauen Compilerfehler posten; Ansonsten ist es schwer zu helfen. :( –
@James: Fair genug. Ich denke, ich habe die '--it' Idee funktioniert, aber haben Sie irgendwelche Vorschläge für die' for' Schleife Zustand? Ich würde '' '' '- verwenden (it; it ! = end; --it) 'aber dann verpasse ich den letzten Punkt. Kann ich den Zustand ändern oder muss ich den Loop-Code einfügen, nachdem der Loop-Body beendet ist? – Zeke