Hallo zusammen,
heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt: Welche Möglichkeiten habe ich in C++ Mehrdimensionale Arrays anzulegen, und wie ist die Syntax hierfür?
Unsere Antwort bzw. unser Lösungsvorschlag darauf war:In C++ gibt es zwei Arten von Arrays: statische und dynamische. Statische Arrays werden typischerweise dann eingesetzt, wenn bereits zur compile-Zeit feststeht, wie groß der Array ist. Ist dies erst zur Laufzeit bekannt muss man dynamische Arrays verwenden. Die Syntax für die Eindimensionalen Varianten, sehen wie folgt aus:
statisch:
int myArray [42];
dynamisch:
int* myArray = new int[42]; //nicht vergessen, später mit delete [] myArray; freigeben
etwas hübscher vielleicht die Varianten aus der STL:
statisch:
array<int, 42> myArray; //tr1
dynamisch:
vector<int> myArray (42);
Die vector Klasse bietet gegenüber dem klassischen mit new allokiertem array zwei Vorteile. Erstens kann es seine größe zur Laufzeit ändern und zweitens allokiert und deallokiert die vector Klasse selbständig den benötigten Speicher. Auf diese Art vermeidet man typische Speicherlecks.
Das array template ist Teil von tr1 und kann mit dem feature pack für C++ hier heruntergeladen werden:
Visual C++ 2008 Feature Pack ReleaseMöchte man nun einen 2D-Array anlegen muss man sich zunächst Fragen, ob es sich hierbei um ein echtes 2D Array handelt, also um ein Array, das eine rechteckige Tabelle representieren könnte (hierbei liegen alle Elemente des multidimensionalen arrays direkt hintereinander im Speicher), oder um ein Array von Zeigern auf Arrays, bei dem die einzelnen Element-Arrays unterschiedliche Längen haben können, aber nicht müssen ( jagged ).
statisch:
int myArray[42][5];
oder mit der STL:
array<array<int, 5>, 42> myArray; //nicht jagged
dynamisch:
int** myArray = new int*[42]; //jagged
for ( int i = 0; i < 42; ++i ) {
myArray[i] = new int[5]; //Achtung: müssen alle explizit deallokiert werden
}
oder mit STL:
vector<vector<int> > myArray(42); //jagged
es ist durchaus möglich, eine Dimension dynamisch festzulegen während die andere statisch ist:
vector<array<int, 5> > myArray(42);
Wir hoffen, vielen Besuchern der
MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.
Viele Grüße,
Markus Klein
MSDN Hotline für MSDN Online Deutschland
Disclaimer:Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können. Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline
Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.