vector wieder kill - aber wie????
-
Hallo an alle,
ich habe mir über zwei vectoren, zwei "Listen" gebastelt. Ich habe es auch mit der einschägigen Literatur geschafft, alles so ans laufen zu bringen wie ich das gern hätte.
Aber wie bekomme ich den die "Liste" wieder leer?.
Hintergund ist der, das im vector<string> unterschiedliche Strings gespeichert werden müssen. Der User wählt dies aus.
Es muß doch einen weg geben, einen vector wieder zu leeren, oder?
Danke+Grüße
tyrel
-
Mit clear()
-
muß ich jeden Eintrag welchen ich mit push_back() reinziehe mit clear() wieder rausnehmen? oder reicht es wenn ich es mache
vector<eString> rname; ... ... rname.clear();
um alle Einträge auch einmal zu killen?
-
Zitat aus CStolls STL Beitrag:
clear() - löscht alle Elemente des Containers
-
-
vielen Dank euch.
-
Davon abgesehen ginge immer diese Variante (wenn man z.B. nicht weiss dass es clear() gibt):
std::vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); //... v = std::vector<int>(); // v ist jetzt auch wieder "leer"
-
cool.
danke für den tipp. ich bin noch sehr neu, was c++ betrifft, ich bitte daher um nachsicht.
grüße
tyrel
-
Und noch eine Alternative:
v.erase(v.begin(),v.end());
mit erase() kannst du auch einzelne Elemente (
v.erase(pos);
- löscht das Element an Position pos) oder Teilbereiche (v.erase(pos1,pos2);
- löscht alle Elemente im Bereich [pos1,pos2[) vernichten.Und nur zur Vollständigkeit
v.swap(vector<int>());//vertausche den Inhalt mit einem (leeren) temporären Vector v.resize(0); while(!v.empty())v.pop_back();
-
CStoll schrieb:
Und nur zur Vollständigkeit
v.swap(vector<int>());//vertausche den Inhalt mit einem (leeren) temporären Vector
und nur für die Richtigkeit - obiger Ausdruck ist kein Standard C++!
Auf den MS-Compilern wird es zwar übersetzt, aber der VC8 meldet bereitswarning C4239: nonstandard extension used
Und der Comeau-Compiler übersetzt es gar nicht.
Die Ursache ist die, dass man an eine nicht const Referenz - wie z.B. bei swap - kein temporäres Objekt übergeben werden darf. Das habe ich auch erst spät gelernt ...
Zurück zum Thema: der beste kill ist immer noch
} // ruft alle Destruktoren der lokalen Objekte
Also der Trick besteht darin, die beiden benötigten Vektoren möglichst lokal zu deklarieren.
Gruß
Werner
-
Werner Salomon schrieb:
CStoll schrieb:
Und nur zur Vollständigkeit
v.swap(vector<int>());//vertausche den Inhalt mit einem (leeren) temporären Vector
und nur für die Richtigkeit - obiger Ausdruck ist kein Standard C++!
Richtig. Das Idiom muss daher lauten:
vector<int>().swap(v);
mit C++0x wird das dann schöner.
Man sollte aber darauf hinweisen, dass sich bei swap die Kapazität ändert.
-
Hallo,
Ihr seit super. Vielen Dank für die vielen Antworten ist echt der Hammer wie man hier Unterstützung bekommt. Respekt. Großes Lob an Euch alle die hier ihr Wissen mit mir und all den anderen Teilen.@Werner: Ich gebe Dir recht, aber leider geht das nicht.