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
Antwort
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.
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";
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. –
das ist Speicher Korruption Aktion. Auch gibt es in C++ kein Längenfeld oder Methode – Swift
- 1. Löschen des Zeichens vom Ende eines Arrays
- 2. Verarbeiten des inneren Elements des JSON-Arrays
- 3. C++ Array-Index ist nach dem Ende des Arrays
- 4. Iterieren durch Tupel, Erhalt des nächsten Elements
- 5. Schleife durch alle Elemente des Arrays innerhalb des Arrays?
- 6. Ampersand am Ende des Arrays vorangestellt var_dump
- 7. Jquery Auswählen des vorherigen Elements nach dem Klicken
- 8. Größe des spezifischen Arrays
- 9. Berechnen des Mittelwerts eines Arrays
- 10. Das letzte Element eines Arrays wurde vom ersten Element des nächsten Arrays überschrieben
- 11. Druckelement des Arrays druckt den Namen des Arrays statt
- 12. Erweitern eines mehrdimensionalen Arrays (2D)
- 13. Erweitern eines Arrays in JSX
- 14. Python - Ändern des Werts eines Elements innerhalb eines Arrays innerhalb eines Wörterbuchs
- 15. Algorithmus: Finden der nächsten Unterschiede zwischen zwei Elementen des Arrays
- 16. Looping durch Ebene 2 des mehrdimensionalen Arrays
- 17. Wert des nächsten Elements ändern
- 18. Entfernen eines Arrays und Umsortieren des Inhalts
- 19. Bedingungen je nach dem Wert eines Arrays
- 20. Filter nach Länge des Arrays in Schwein
- 21. Länge des Arrays erhalten?
- 22. Drucken des Arrays durch jeden Durchlauf
- 23. Wie durch Elemente des Arrays in Javascript
- 24. Array Traversal Magnituden schneller nach dem Entfernen des ersten Elements
- 25. Nach Eigenschaften des verschachtelten Arrays filtern - Knockout
- 26. Index eines Arrays in Liste des Arrays in C# findet
- 27. Größe des multidimensionalen Arrays
- 28. Python: Ausschneiden des äußeren Rahmens eines Arrays
- 29. Benutzerdefinierte Größe des Arrays
- 30. Rückgabe des Arrays (Zeigers) des 2D-Arrays in C
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
"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. –
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. –