vector iterator end()
-
Hi,
ich möchte nach und nach die letzten Elemente aus meinem
vector<int> bla;löschen. Ich habe einen Iterator
vector<int>::iterator it;Nur leider zeigt
it = bla.end()hinter mein letztes Element..
Ist es da überhaupt sinnvoll (effizient) mit einem Iterator zu arbeiten?
Würde folgendes klappen:--it=bla.end()?
Wie löse ich es am besten (effizientesten) das mein Iterator auf das letzte Element zeigt?DANKE!! Lukas

-
Würde folgendes klappen
Nein, eher:
it = --bal.end()
-
Wie wäre es mit dem reverse_iterator?
-
Oder Direktzugriff mittels size-1 ?
-
it = bla.rbegin()ist das richtige

ist das effizienter als
it = --bal.end()?
-
int arr[] = { 1, 2, 3 }; std::vector<int> vec(arr, arr + 3); // Letztes Element abrufen: int last = vec.back(); // Letztes Element löschen: vec.pop_back();http://www.cplusplus.com/reference/stl/vector/
Grüssli
-
ist das effizienter als
Wenn du dir darueber Gedanken machen musst, dann hast du was falsch gemacht.
-
Wenn du dir darueber Gedanken machen musst, dann hast du was falsch gemacht.Oh was meinst du? Sind Iteratoren ineffizient?
@Dravere: Danke, aber ich wollte eigentlich Iteratoren verwenden, außer ihr sagt jetzt das ist Quatsch...
Wann sind denn Iteratoren sinnvoller?
-
Warum ist es denn wichtig, dass diese Operation effizient ist? Btw. alle Operationen (Iteratoren und Co.) sind in O(1) und damit sehr effizient.
Danke, aber ich wollte eigentlich Iteratoren verwenden, außer ihr sagt jetzt das ist Quatsch
Falls du wirklich nur das letzte Element loeschen moechtest, dann solltest du pop_back() verwenden.
Wann sind denn Iteratoren sinnvoller?
Wenn man iterieren moechte.
-
Ich möchte sowas: (wenn ich eine Klasse Auto (mit Klassenvariablen: baujahr, kosten) habe)
vector<Auto> bla; vector<Auto>::iterator it; int baujahr; int kosten; it = bla.rbegin(); baujahr = it->baujahr; kosten = it->kosten; bla.pop_back();sind da iteratoren hilfreich?
-
das sieht gerad so aus, als ob du so was hier machen wölltest:
while(! vec.empty()) { std::cout << vec.back().get_baujahr(); std::cout << vec.back().get_kosten(); /*...*/ vec.pop_back(); };bb
-
lukas M. schrieb:
vector<Auto> bla; vector<Auto>::iterator it; int baujahr; int kosten; it = bla.rbegin(); baujahr = it->baujahr; kosten = it->kosten; bla.pop_back();sind da iteratoren hilfreich?
Weniger.
Versuch mal ein sinnvolleres Beispiel zu bringen. Für den Zugriff auf das letzte Element gibt es auch vector<>::back().
Iteratoren sind vor allen Dingen eine Abstraktion. Sie sind praktisch, wenn Du zB Algorithmen schreiben willst, welche auf beliebigen Sequenzen laufen sollen -- und nicht nur auf Vektoren beispielsweise.
Wenn Du von vornherein weißt, dass Du mit einem Vektor arbeitest, kannst Du auch die komplette Schnittstelle nutzen, die Dir std::vector<> bietet -- inklusive
back(),pop_back().