Ich habe gerade den folgenden Code geschrieben, und war sehr überrascht, dass es nicht kompilieren lässt:Warum werden Rückwärts-Iteratoren nicht unterstützt?
std::deque<int> container;
// filling the container...
for (auto it = container.rbegin(); it != container.rend(); ++it)
if (*it == 5)
{
container.erase(it);
break;
}
Wie Sie sehen können, habe ich das letzte Element eine bestimmte Kriterien übereinstimmen, wenn überhaupt löschen möchten.
Der Fehler
keine passende Funktion für Aufruf std :: deque :: erase (std :: reverse_iterator ist ...
Zuerst glaubte ich nicht, es war ., die durch den Reverse-Iterator, aber das ist in der Tat der Fall, da rbegin
/rend
mit dem ersetzen begin
/end
es löst
So, 2 Fragen:
- Warum wird dies nicht unterstützt? Ist es nur eines dieser kleinen Dinge, die das C++ - Komitee vergessen hat, in den Standard aufzunehmen, oder gibt es eine Rechtfertigung dafür, dass diese Überladung fehlt?
- Was ist die eleganteste Art zu tun, was ich will? Bleibe ich beim Iterieren nach Index?
Ich denke, Ihre Antwort ist hier: http://stackoverflow.com/questions/1830158/how-to-call-erase-with-a-reverse- Iterator –
Sind 'm_container' und' container', die gleichen? – ZDF
@ ZDF: ja, natürlich. Fixed. –