element aus pos a der liste entfernen



  • hallo
    ich hab folgendes Problem
    Ich möchte wie oben beschrieben an der a-ten Stelle ein Element entfernen. Kiregs aber nicht gebacken.
    muss das la mit erase machen.
    Hatte mir das weil mir nix besseres einfiel in etwa so forgestellt. klappt aber nicht.

    int j=0;
    	for (i = liste.begin(); i!= liste.end(); ++i)
    	{
    		if (a==j) liste.erase(i);
    		j++;
    	}
    
    }
    

    Wie mach ich dat?

    Und wie setzte ich den iterator an a-te Stelle hab bislang nur gefunden wie man ihn an die erste und auf die eltzte Position zeigen lässt



  • Dein Code ist gefährlich, weil erase() den Iterator ungültig macht. Das führt zu undefiniertem Verhalten. Du müsstest den Code so ergänzen:

    int j=0;
        for (i = liste.begin(); i!= liste.end(); ++i)
        {
            if (a==j)
                {
                liste.erase(i);
                break;     // Iterator i nicht weiter verwenden!
                }
            j++;
        }
    
    }
    

    ... dann sollte er auch funktionieren.

    std::advance() macht übrigens dasselbe, nur dass die Funktion effektiver arbeitet, falls ein Random-Access-Iterator übergeben wird:

    #include <iterator>
    
    Listentyp::iterator iter = liste.begin();
    std::advance(iter, a);
    liste.erase(iter);
    

    Stefan.


Anmelden zum Antworten