Kurze Frage C++ Primer betreffend
-
Schönen Tage euch allen.
Eine kurze frage. Ich hab mir vor ein paar Tagen den C++ Primer geholt. Hatte auf verschiedenen Seiten gelesen, es sei ganz gut. Ich glaube unter anderem auch hier. Also ich hätte nur eine kurze Frage, die ein Beispiel aus dem Buch betrifftforward_list<int> flst = {0,1,2,3,4,5,6,7,8,9}; auto prev = flst.before_begin(); // denotes element "off the start" of flst auto curr = flst.begin(); // denotes the first element in flst while (curr != flst.end()) { // while there are still elements to process if (*curr % 2) // if the element is odd curr = flst.erase_after(prev); // erase it and move curr else { prev = curr; // move the iterators to denote the next ++curr; // element and one before the next element } }
Also angenommen, bei dem ersten Element von flst würde ein ungerader Wert stehen. Dann wird ja prev entfernt. Da aber prev noch auf kein existierendes Element zeigt, kann es dadurch eventuell zu Fehlern kommen ? Ich bin relativ neu, was Container angeht und könnte mir denken bei den wird es anders behandelt. Wollte nur auf Nummer sicher gehen und nachfragen.
-
Kein Problem, siehe z.B. http://www.cplusplus.com/reference/forward_list/forward_list/before_begin/
Insbesondere:
The iterator returned shall not be dereferenced: It is meant to be used as an argument for member functions emplace_after, insert_after, erase_after or splice_after, to specify the beginning of the sequence as the location where the action is performed.
Also,
prev
wird mitbefore_begin
initialisiert. Das darf zwar nicht dereferenziert werden, ist aber dafür gedacht, fürerase_after
verwendet zu werden. Wie könntest du sonst das erste Element löschen?
-
Ahhhh
Vielen dank. Hab alles verstanden. Dann kann ich ja in Ruhe weiter lernen.