Bestimmte Elemente aus dem vector entfernen



  • Hallo Leute,

    ich will alle Z-Elemente aus meinem vector entfernen, deren Wert kleiner ist als eine Vorgabe.

    Der vector ist schon vorgegeben und hat folgende Struktur: x1, y1, z1, x2 , y2 ... usw.

    void BodenAbschneiden( double grenze , std::vector<float> &wolke) const
    {
    	for( vector<float>::iterator i = wolke.begin() ; i != wolke.end() ; i++ )
    	{
    		if( *( i + 2 ) > grenze )
    		{
    			// ganzen Punkt (3 Werte löschen)
    			i = i.erase( i , i + 2 );
    		}
    		else
    		{
    			// Springe zum nächsten Punkt
    			i++;
    			i++;
    		}
    	}
    }
    

    Jetzt habe ich zwei Probleme:

    1. Ich weiß nicht ob man während einem durchlauf Elemente aus dem Vektor löschen kann.

    2. VS2010 sagt, das die Funktion erase nicht existiert.

    Könnte jemand bitte Helfen? Danke



  • Der iterator loescht keine Elemente, das macht der vector. Daher muss es heissen:

    i = wolke.erase(i, i + 2);
    

    Und ja, du kannst waehrend des Iterierens Elemente loeschen, dazu ist der Rueckgabewert von erase naemlich da.



  • Unter Umständen musst du auch das i++ noch aus dem Schleifenkopf nehmen und stattdessen in das else packen.



  • Sicher, dass du nicht eine Struktur (o. Tupel) mit diesen Drei Werten haben willst?

    Wie auch immer...

    for(unsigned i = 2; i < wolke.size();i += 2)
        wolke.erase(wolke.begin() + i);
    


  • Habs hingekriet. Danke an alle Antwortenden.


Anmelden zum Antworten