Vector , List , Deque,... Was ist das richtige?

Kaiser206

Erfahrenes Mitglied
Hallo,
ich habe viel über die im Titel stehenden Elemente gelesen, doch ich blicke trotzdem nicht durch, welches nun für was geeignet ist. Immer wenn ich sie einsetze kommt es zum Absturz oder die Programme lassen sich nichtmal compilieren.

Ich benötige folgendes:
-Eine Objekt, dass unbegrenzt viele Elemente abspeichert.
-Während des Programms neue Elemente anfügt.
-Den einfachen gezielten Zugriff auf einzelne Elemente ermöglicht.
-Das löschen von Elementen an beliebiger Stelle ermöglicht.

Bisher habe ich dafür den vector verwendet, doch er erscheint mir dafür irgendwie ungeeignet. Kann mir da jemand helfen?

MFG
Kaiser206
 
Hallo,
alle Klassen eignen sich für beliebige Mengen Elemente. Jede hat jedoch so ihre Eigenheiten.
Nehmen wir mal vector: Er bietet den schnellstmöglichen Zugriff über Indices, ist aber langsam, wenn neue Elemente zugefügt oder gelöscht werden. Der Grund ist, dass ein vector immer an 1 Stück im Speicher untergebracht wird. Reicht der vorgesehene Speicher nicht aus, wird ein größerer Speicher angefordert und der komplette Inhalt des alten Speichers in den neuen kopiert. Deshalb kann ein einzelnes push_back() ggf. zu langen Laufzeiten führen. Günstig ist, wenn man vorher schon weiß, wie groß der Vektor werden wird. Dann kann mit reserve() Speicher in beliebiger Menge vor-reserviert werden.
lists und deques sind besser für häufiges Löschen/Sortieren/Hinzufügen, da dort alles über Zeiger läuft. Aber der Zugriff ist hier für "Elemente mittendrin" langsam, da erst eine Zeigerliste durchgehangelt werden muss, um das x-te Element zu finden.
 
Hallöchen,

mein Vorredner hat vollkommen recht.
Die Frage ist wie oft du Objekte löschen bzw. hinzufügen musst und wie wichtig der direkte Zugriff auf Objekte sind?!

std::list erfüllt alle Punkte optimal, nur halt nicht den Zugriff übern index, so dass du gezwungen bist mit nem iterator dadurch zu laufen...

Lieben Gruß
RuFF
 
Zurück