Wie erstelle ich ein dynamisches Array von Ganzzahlen in C ++ mit dem newSchlüsselwort?
Wie erstelle ich ein dynamisches Array von Ganzzahlen in C ++ mit dem newSchlüsselwort?
Antworten:
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
Vergessen Sie nicht deletejedes Array, das Sie zuweisen new.
deleteist Ihr Code falsch.
Seit C ++ 11 gibt es eine sichere Alternative zu new[]und ohne delete[]Overhead std::vector:
std::unique_ptr<int[]> array(new int[size]);
In C ++ 14:
auto array = std::make_unique<int[]>(size);
Beide oben genannten basieren auf derselben Header-Datei. #include <memory>
Möglicherweise möchten Sie die Standardvorlagenbibliothek verwenden. Es ist einfach und benutzerfreundlich und Sie müssen sich keine Gedanken über die Speicherzuweisung machen.
http://www.cplusplus.com/reference/stl/vector/vector/
int size = 5; // declare the size of the vector
vector<int> myvector(size, 0); // create a vector to hold "size" int's
// all initialized to zero
myvector[0] = 1234; // assign values like a c++ array
std::vectormit dem entsprechenden Konstruktor funktioniert wirklich gut und sollte als Alternative hervorgehoben werden. Manchmal stellen die Leute die Frage schlecht, und dies kann als einer dieser Fälle gelten - es ist sehr kurz und gibt keinen Grund, es zu bevorzugen new.
new[]stattdessen zu verwenden std::vector.
deleteniemals etwas manuell benötigen . Ist auch std::vectorein dynamisches Array und macht nichts mit einer verknüpften Liste. Es ist nur eine Hülle um einen Teil der Erinnerung.
newund deleteimplementieren immer noch Wrapper. Der Punkt ist, dass Sie eine Ressource nicht verwalten und verwenden, sondern das eine oder andere tun.
int* array = new int[size];
std::vector::data()Member-Funktion gibt das zugrunde liegende Raw-Array zurück, wenn dies erforderlich ist.
operator&eher verwenden, als data()einen Zeiger von einem Vektor abzurufen , aber es stimmt, dass ein Vektor die Kontiguitätsgarantie bietet, die für die Kompatibilität mit Funktionen erforderlich ist, die Arrays erwarten.
Sobald es um dynamisches Array geht, möchten Sie möglicherweise nicht nur ein Array mit variabler Größe erstellen, sondern auch dessen Größe zur Laufzeit ändern. Hier ist ein Beispiel mit memcpy, das Sie verwenden können memcpy_soder std::copyauch. Abhängig vom Compiler <memory.h>oder <string.h>möglicherweise erforderlich. Wenn Sie diese Funktionen verwenden, weisen Sie einen neuen Speicherbereich zu, kopieren die Werte der ursprünglichen Speicherbereiche und geben sie dann frei.
// create desired array dynamically
size_t length;
length = 100; //for example
int *array = new int[length];
// now let's change is's size - e.g. add 50 new elements
size_t added = 50;
int *added_array = new int[added];
/*
somehow set values to given arrays
*/
// add elements to array
int* temp = new int[length + added];
memcpy(temp, array, length * sizeof(int));
memcpy(temp + length, added_array, added * sizeof(int));
delete[] array;
array = temp;
Sie können stattdessen Konstante 4 verwenden sizeof(int).
Ordnen Sie dynamisch Speicher zu, indem Sie new:
int* array = new int[SIZE];
#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
float arr[2095879];
long k,i;
char ch[100];
k=0;
do{
cin>>ch;
arr[k]=atof(ch);
k++;
}while(ch[0]=='0');
cout<<"Array output"<<endl;
for(i=0;i<k;i++){
cout<<arr[i]<<endl;
}
return 0;
}
Der obige Code funktioniert, die maximale Float- oder Int-Array-Größe, die definiert werden konnte, war mit der Größe 2095879, und die Exit-Bedingung wäre nicht Null, beginnend mit der Eingangsnummer
std::vector<int>. Und ein Buch .