Ein Vektor ist die "intelligentere" Ausprägung eines Datenfeldes (array). Die Elemente eines Vektors liegen im Speicher hintereinander - wie beim Datenfeld. Ein Vektor besitzt somit die gleichen Vor- und Nachteile wie ein Datenfeld.

Genauer betrachtet ist ein Vektor ein Objekt, das ein Datenfeld aufbaut und verwaltet. Er "kennt" zu jeder Zeit seine Größe und sein Fassungsvermögen. Er stellt Elementfunktionen (Schnittstellen) zur Verfügung, mit denen Größe und Fassungsvermögen abgefragt werden können.

Die wichtigsten Eigenschaften und Verhaltensweisen eines Vektors sind:

Insbesondere der letzte Punkt zeigt die Problematik beim Vergrößern eines Vektors:

Wird einem Vektor ein Element hinzugefügt und dabei dessen Kapazität überschritten, so werden folgende Schritte durchgeführt:

  1. Es wird versucht, einen Speicherbereich mit neuer Größe zu allokieren.
  2. Bei Erfolg werden alle bisherigen Elemente in den neuen Speicherbereich kopiert.
  3. Der zuvor belegte Speicherbereich wird freigegeben.
  4. Das neue Element wird eingefügt.

Soll das Element nicht am Ende des Vektors eingefügt werden, dann müssen

  1. alle Elemente ab der Einfügestelle um einen Platz nach hinten verschoben und
  2. das Element an die "frei gewordene Stelle" gesetzt werden.

Wenn Sie einen Vektor als Container verwenden und häufige Einfügungen vornehmen wollen, dann sollten

  1. diese Einfügungen möglichst am Ende des Vektors erfolgen sowie
  2. die erforderliche Kapazität des Vektors zuvor bekannt sein und entsprechend gewählt werden. Dies ist bei Verwendung eines geeigneten Konstruktors möglich.

Besonders Wichtig!

Alle Iteratoren für den Zugriff auf einen Vektor können nach einer Einfügung ungültig sein.
Dies liegt an einer möglichen Neuallokation von Speicher. Es liegt an Ihnen, die Gültigkeit von Iteratoren zu beachten. Falls Sie sicherstellen, dass durch ein Einfügen keine Neuallokation erforderlich ist (Vektorkapazität hinreichend), dann referenzieren nur alle Iteratoren auf Elemente hinter der Einfügestelle andere Elemente als vor dem Einfügen. Ein alter Endeiterator referenziert beispielsweise nicht mehr das Vektorende.

Beim Entfernen von Elementen können alle Iteratoren, die hinter die entfernten Elemente gezeigt haben, ungültig werden. Insbesondere ein alter Endeiterator wird mit Sicherheit ungültig.

Im Zweifelsfalle sind also bei Bedarf Iteratoren vom Vektorobjekt zu holen und nicht etwa alte, in Variablen gespeicherte Iteratorwerte zu verwenden.

Informationen zum Klassentemplate vector finden Sie beispielsweise bei Silicon Graphics Computer Systems, Inc..

weiter mit dem Anlegen eines Vektors