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 betrifft

    forward_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 mit before_begin initialisiert. Das darf zwar nicht dereferenziert werden, ist aber dafür gedacht, für erase_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.


Log in to reply