Arrays (dynamisch)
-
Hallo, wie erstelle ich ein Array dessen Größe sich ständig ändern kann. Die STL will ich nicht benutzen. Verkettete Listen will ich auch nicht verwenden. Ich muss schnellst möglich auf ein x-beliebiges Element zugreifen können.
-
warum willst du nicht die stl verwenden? vector ist doch sicher eine überlegung wert.
ansonsten, die syntax:int *i = new int[50]; //ein array aus integern i[10] = 20; delete [] i; //delete [] nicht vergessen!
zum größe ändern: entweder du nimmst vorher schon ein etwas größeres array, so dass du bei einem nicht zu großen wachstum noch platz für neue elemente hast, oder du allokierst ein zweites array, kopierst die werte aus dem ersten in das zweite, und löscht anschließend das erste. (das zweite array kann dann natürlich ne andere größe haben)
std::vector macht das alles für dich. würd ich also nehmen.
achja: bei den selbst allokierten arrays musst (solltest) du die größe extra speichern, du hast nämlich keine möglichkeit, diese im nachhinein noch abzufragen. (bei vector schon ;))
-
ich würde vorschlagen eine funktion zu schreiben
//für int arrays int * resize(int * array, size_t old_size, size_t new_size) { int * p = new int[new_size]; for(int i = 0; i < old_size && i < new_size; ++i) p[i] = array[i]; delete[] array; // na hoffentlich wird nicht irgend wo noch ein pointer auf das array gehalten return p; } //aber machen wir besser daraus ein template template<typename T> T * resize(T * array, size_t old_size, size_t new_size) { int * p = new T[new_size]; for(int i = 0; i < old_size && i < new_size; ++i) p[i] = array[i]; delete[] array; // na hoffentlich wird nicht irgend wo noch ein pointer auf das array gehalten return p; } int main() { double * bla = new double[100]; //ah ich wills doch größer bla = resize( bla, 144 ); }
ist aber die misstige lösung, besser wäre vector, aber das wills du ja nicht (naja man kann dich ja nicht zwingen, wenn du die geleichen erfahrungen machen willst wie wir)