Reallocation in C: Erkundung der std::vector-Lösung
In C kann das Fehlen einer expliziten Realloc-Funktion Bedenken aufwerfen, wenn Sie müssen dynamische Puffer erweitern. Die Vorlagenklasse std::vector bietet jedoch eine praktische und effiziente Lösung für dieses Problem.
Reallocation verstehen
Reallocation beinhaltet die Anpassung der Größe eines zuvor zugewiesenen Speicherblocks . In C wird dies durch die Realloc-Funktion erreicht. Allerdings führt C die Klasse std::vector ein, die dynamische Arrays verwaltet und eine einfachere und sicherere Methode zur Neuzuweisung bietet.
Verwendung von std::vector für die Neuzuweisung
Um ein Array von n Elementen mit auf 0 gesetzten Anfangswerten zuzuweisen, verwenden Sie normalerweise:
Type* t = (Type*)malloc(sizeof(Type)*n); memset(t, 0, sizeof(Type)*m);
With std::vector, dies kann vereinfacht werden zu:
std::vector<Type> t(n, 0);
Um das Array zu vergrößern, um n2 Elemente aufzunehmen, würden Sie Folgendes verwenden:
t = (Type*)realloc(t, sizeof(Type) * n2);
Mit std::vector ist dies erreicht durch:
t.resize(n2);
Übergabe von Zeigern an Funktionen
Wann Wenn Sie Zeiger auf Funktionen übergeben, können Sie &t[0] anstelle von t verwenden. Dies ist gültig, da std::vector die Verwendung seiner Elemente als Zeiger auf das zugrunde liegende Array unterstützt.
Foo(&t[0])
Fazit
Durch die Verwendung von std::vector Sie können dynamischen Speicher in C einfach und sicher neu zuweisen. Dadurch entfällt die Notwendigkeit einer expliziten Speicherverwaltung, wodurch Ihr Code prägnanter und weniger fehleranfällig wird.
Das obige ist der detaillierte Inhalt vonWie geht „std::vector' mit der dynamischen Array-Neuzuweisung in C um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!