Ich arbeite an einem Programm, wo ein Benutzer weiterhin Zahlen eingeben, die in einem Array gespeichert werden, wenn das Array voll ist Ich versuche, das ursprüngliche Array in ein neues zu kopieren und weiter zu füllen Sie das Array, aber ich kann es überhaupt nicht funktionieren. Hier ist mein Code so weitVersuchen, Array-Größe dynamisch zu erhöhen
Antwort
Ich kann es, indem die Doppelzeiger zeigen auf die Doppel, anstelle von Arrays von Doppelzeiger zu kompilieren erhalten
int size;
cout << "Please enter how many numbers you want to enter: ";
cin >> size;
double *array = new double[size];
// ^--- not pointers to doubles
cout << "Please enter your numbers: ";
for(int i = 0; i < size; i++) {
cin >> array[i];
if(i == size-1) {
int newSize = 2*size;
double *arrayb = new double[newSize];
// ^--- not pointers
for(int i = 0;i<size;i++) {
arrayb[i] = array[i];
}
delete [] array;
array = arrayb;
size = newSize;
}
}
Sie haben im ersten neuen Speicher für die Daten genügend Speicher zugewiesen. ABER Wenn Sie einen vor dem Ende des aktuellen Werts von size
erhalten, verdoppeln Sie den zugewiesenen Speicherplatz. Und make size = newSize
. Die äußere for
-Schleife wird niemals enden, es sei denn, es wird eine Ausnahme ausgelöst, z. B. eine bad::alloc
, die irgendwann passieren wird.
Wenn Sie die maximale Größe Ihrer Sammlung vor der Ausführung nicht kennen, müssen Sie Array vermeiden. Wie TartanLlama sagt, können Sie einen std :: vector verwenden. Mit Vector können Sie Elemente beliebig hinzufügen. Aber es gibt viele Container mit unterschiedlichen Zugriffsmethoden. Siehe diesen Link einen ersten Blick haben, wie Ihre Container wählen: In which scenario do I use a particular STL container?
Sie sollten einen geeigneten Behälter wählen. http://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular-stl-container – alirakiyan
Wenn Sie die Kompilierungsfehlern lesen, sehen Sie, das Problem:
g++ -std=c++17 -fPIC -g -Wall -Wextra -Wwrite-strings -Wno-parentheses -Wpedantic -Warray-bounds -O2 -Weffc++ 14226370.cpp -o 14226370 14226370.cpp: In function ‘int main()’: 14226370.cpp:11:37: error: cannot convert ‘double**’ to ‘double*’ in initialization double *array = new double*[size]; ^ 14226370.cpp:17:49: error: cannot convert ‘double**’ to ‘double*’ in initialization double *arrayb = new double*[newSize];
Sie erstellen ein Array von Zeigern zu verdoppeln und zu versuchen, einen einzelnen Zeiger zu initialisieren beide zu verdoppeln, auf Fälle.
Mit Blick auf die Art, wie Sie diese verwenden, sollten Sie wahrscheinlich schreiben new double[size]
und new double[newSize]
.
- 1. Versuchen, die USB-Lebensdauer zu erhöhen
- 2. Versuchen, Listenelemente dynamisch zu trennen
- 3. Wie im Frühling Benutzerobjekt dynamisch zu erhöhen amqp (rabbitmq)
- 4. Shell-Skript zum Ermitteln der Arraygröße von Cobol-Programmen
- 5. Dynamisch erhöhen Kreis in Vanille Javascript
- 6. Dynamisch die Größe der Textansicht erhöhen
- 7. Versuchen Sie eine Tabelle dynamisch in Angular
- 8. HashMap Sortieren, die auf Arraygröße Array zuordnet basierend
- 9. C++ Ausnahme: Arrays werfen und Arraygröße im Catch erhalten
- 10. Versuchen, eine Formel automatisch zu inkrementieren
- 11. Solr 4 ist es ein echtes Bedürfnis zu erhöhen MaxPermSize
- 12. Wie kann man die linke Position dynamisch mit jquery erhöhen?
- 13. Wie Indices vom Typ Datum zu erhöhen
- 14. Wie dbms_output Puffer zu erhöhen?
- 15. Grep und Wert zu erhöhen
- 16. ICU erhöhen Anwendungsgröße zu viel
- 17. Wie nodejs Standardspeicher zu erhöhen?
- 18. Versuchen, Cosmosdb zu verstehen
- 19. versuchen, Seitenumbruch zu verwenden
- 20. Versuchen, Ereignis zu C#
- 21. Versuchen, goroutines zu verstehen
- 22. Versuchen, Dateitypen zu bestimmen
- 23. Fehlerdatentabelle zu füllen versuchen,
- 24. Versuchen, AppDomains zu vermeiden
- 25. Versuchen, MockSequence zu verstehen
- 26. Versuchen, SQL zu lernen
- 27. Versuchen, Eingabevariablen dynamisch in HTML-Seite mit jQuery
- 28. Seek Bar Höhe erhöhen
- 29. Wie Index von Array zu erhöhen, wenn der Wert dynamisch (Swift) ist
- 30. Neuling zu clojure, versuchen, einen Ausdruck zu verstehen
Verwenden Sie stattdessen ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). – TartanLlama
Der Ausdruck 'new double * [size]' ordnet 'double' ein Array von' size * * pointers * zu. Bei einem 32-Bit-System führt dies zu Problemen. –
Und bitte näher auf Ihr Problem? * Wie * kannst du es überhaupt nicht "zur Arbeit bringen"? Bitte [lesen Sie, wie Sie gute Fragen stellen können] (http://stackoverflow.com/help/how-to-ask). –