2016-12-25 5 views
0

Angenommen, Sie haben ein Array der Größe 13. Stellen Sie sich vor, es gibt keinen zusammenhängenden verfügbaren Speicherbereich zum Speichern eines Arrays der Größe 14; Das Kopieren des ursprünglichen Arrays in ein neues Array ist keine Option. Die einzige Möglichkeit, das Array um ein Element zu erweitern, während die ersten 13 Elemente gleich bleiben, besteht darin, das 14. Element an der nächsten Speicheradresse nach dem 13. Element zu speichern. Wie würde ich das machen, wenn dieser Speicherplatz verfügbar wäre? Dynamische Speicheradressierung?Erweitern eines Arrays durch Speichern des nächsten Elements direkt nach dem Ende des vorherigen Arrays

+2

Ich denke, Sie sollten untersuchen, wie [ 'std :: deque'] (http://en.cppreference.com/w/cpp/container/deque) ist [typischerweise implementiert] (http: //thispointer.com/what-iststddeque-and-how-deque-works-internally /) ... Du solltest dir eine ungefähre Vorstellung davon machen können, wie es dir geht. – WhiZTiM

+0

"Wie würde ich das machen, wenn dieser Speichersteckplatz verfügbar wäre?" Woher weißt du, ob es einen verfügbaren Speicherplatz gibt? Bitte zeigen Sie etwas Code. –

+0

Ich sage nicht, dass ich das weiß, ich sage nur, wenn es keinen verfügbaren zusammenhängenden Speicherbereich für ein Array der Größe 14 zum Erstellen eines neuen Arrays gab, denn dann müsste ich es so machen. Sie können das überprüfen, indem Sie versuchen, das neue Array dynamisch zuzuweisen und zu überprüfen, ob es einen Fehler zurückgibt. –

Antwort

0

Es gibt keine C++ - Standardmethoden. Standard-Bibliothek haben in der Regel realloc() definiert, aber auf den meisten Plattformen ist es alles, was Aufruf von einem anderen malloc() und memcpy(), um Speicher zu kopieren. Möglicherweise möchten Sie Standardbibliothekscontainer verwenden, die diesen Mechanismus verbergen - das ist am üblichsten - oder ein Speicherpoolobjekt verwenden (all möglichen erforderlichen Speicher zuweisen und dann Objekte darin "zuordnen"), das ist weniger üblich und wird normalerweise für FEMA oder Bildverarbeitung verwendet oder in OpenGL-Render-Engines.

0

Ich würde vorschlagen, Länge des Arrays nehmen und Daten in Länge + 1 Position einfügen. zB:

int arraylength = abc.length; 
abc[arraylength + 1].value = "Your Value"; 
+1

Dieser Speicherbereich wurde jedoch nicht formal initialisiert/zugewiesen, sodass er während der gleichen Ausführung durch eine zukünftige dynamische Speicherzuordnung ersetzt werden könnte. –

+0

das ist Speicher Korruption Aktion. Auch gibt es in C++ kein Längenfeld oder Methode – Swift

Verwandte Themen