C++ Vector mit Struct, v.erase benutzen
-
Hallo
Ich lerne momentan Vectoren zu benutzen und habe gerade ein Problem.
struct Marke { int Eintrag; char Name[30]; }; vector<Marke> vec(10); vec[0].Eintrag = 1; strcpy(vec[0].Name, "Hallo");Ich weiss das macht absolut keinen Sinn aber ich bin halt am probieren. Nun möchte ich diesen Eintrag wieder löschen.
Mit dem erase komme ich einfach nicht klar:
v.erase(i); Entfernt das Element i aus v.Wie entferne ich nun zb den Eintrag bei [0]?
Danke für eure Hilfe
Gruss
Typhoon
-
v.erase (v.begin ());?!

EDIT:
Du brauchst einen Iterator.
-
Ahh das funktioniert sogar.
Habs noch ein bisschen abgeändert, immer Speicherplätze zu reservieren macht ja keinen Sinn oder?
vector<Marke> vec; Marke heini; heini.Eintrag = 1; strcpy(heini.Name, "Hallo2"); vec.push_back(heini);Ich werds nachher noch mit Konstruktoren probieren, habe darüber gelesen.
Nochmal ne merwürdige Frage
Nehmen wir an ich habe nun 3 Einträge in dem Vektor gespeichert, wie kann ich mit einem Iterator auf den zweiten zeigen? (Um ihn zb mit erase(i) zu löschen)Danke
-
http://www.cplusplus.com/reference/stl/vector/
iterator einfach inkrementieren.
std::vector<T> v; std::vector<T>::iterator it = v.begin (); //erstes Element ++it; //zweites Element usw. it = v.end (); // nach dem letzten Element (nicht T !)
-
Danke
Nochmal ich
vector<Marke> vec; vector<Marke>::iterator it = vec.begin (); Marke heini; heini.Eintrag = 1; strcpy(heini.Name, "Hallo"); vec.push_back(heini); strcpy(heini.Name, "Hallo1"); vec.push_back(heini); strcpy(heini.Name, "Hallo2"); vec.push_back(heini); strcpy(heini.Name, "Hallo3"); vec.push_back(heini); vec.erase(it);Kannst du mir sagen wieso beim Ausführen das Programm crasht mit der Meldung: vector erase iterator outside range
Kann man eine Position auch direkt anspringen, sowas wie it = 3? Oder muss man sich dann eine for-Schleife machen?
Gruss
-
Schreib 100x: Du sollst Iteratoren nicht speichern!
Danach rückst du die Zeile vector<Marke>::iterator it = vec.begin (); direkt vor das erase.
-
Du bist genial

Wenn ihr an den zehnten Eintrag wollt, macht ihr dann:
for(int i=0; i<10; i++)
it++;oder geht das auch schneller?
Super hilfe hier

-
vector hat RandomAccess-Iteratoren. Du kannst also direkt 10 auf den Startiterator aufaddieren. Oder einfach vec[9] schreiben, wie bei einem normalen Array