Frage von gerlochi, 38

Kleine Umsetzungsfrage(C++)?

Hi! Ich habe ein kleines Problem. Ich würde gerne jetzt Beipsielsweise ein Programm schreiben das eine Zahlenfolge in einem Vector speichert. Diese müsste ich dann von Hinten nach vorne durchgehen und jedes mal das letzte Arument löschen. Also Beispielsweise so:

Ich habe einen Vector mit den Werten 0,1,2,3,4,5,6,7,8 und 9. Jetzt fange ich von hinten an und habe die 9. Gehe dann eine Schritt im Index zurück und bekomme die 8. Die 9 wird dann gelöscht und die 8 ist dann der letzte Wert. Dann gehe ich weiter und bin bei der 7, die 8 wird gelöscht und die 7 ist ab da an die letzte Zahl.

Ich würde das irgendwie mit vector.erase(iterator) machen, jedoch habe ich das Thema mit den Iteratoren noch nicht ganz verstanden, vielleicht kann mir das ja jemand erklären.

MfG :)

Antwort
von Fireonic, 13
#include <vector>
#include <iostream>

int main()
{
auto my_vector = std::vector{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //Erstelle und fülle Vector

while(!my_vector.empty()){//Solange der vector nicht leer ist
//Tue Dinge mit dem Vector

std::cout << "Letztes Element: " << my_vector.back() << "\n"; //Gib das letzte Element aus

my_vector.erase(my_vector.end() - 1); //.end() zeigt hinter das letzte Element, also löschen wir eins davor
}
std::cout << "Wir sind durch!\n";
}

Output:

Letztes Element: 9
Letztes Element: 8
Letztes Element: 7
Letztes Element: 6
Letztes Element: 5
Letztes Element: 4
Letztes Element: 3
Letztes Element: 2
Letztes Element: 1
Letztes Element: 0
Wir sind durch!

Iteratoren sind sozusagen Zeiger, die auf Elemente inerhalb des Vectors zeigen. Ich hoffe ich konnte dir etwas hier verdeutlichen. VIel Glück!

Antwort
von Lumpi101, 11

std::vector<int>::iterator it = myvector.end() - 1;

while(it != myvector.begin())  //solange ausführen, bis it auf das erste Element zeigt

{

    //it zeigt auf das letzte Element des vectors

    //do something

    myvector.erase(it--);  //letztes Element löschen und it um eins nach unten zählen

}

//der vector hat jetzt noch die Größe 1 und it zeigt auf das letzte (einzig übrig gebliebene) Element im vector

Wenn ein Element von myvector gelöscht wird und it zeigt gerade auf dieses Element oder auf irgendein Element dahinter, dann wird it ungültig! Daher ist der Befehl myvector.erase(it--); wichtig, denn it-- liefert den Wert des Iterators zurück und erniedrigt ihn danach um eins. Erst dann wird der erase-Befehl ausgeführt mit dem (jetzt nicht mehr in it gespeicherten) zurückgegebenen Iterator. Das heißt, it bleibt gültig und kann weiter verwendet werden.

Es scheint mir allerdings einfacher zu sein, wenn man einfach den Befehl "myvector.erase(myvector.end()-1);" oder "myvector.resize(myvector.size()-1));" solange ausführt, bis myvector.size() 0 ist oder so ähnlich...

Keine passende Antwort gefunden?

Fragen Sie die Community