Come creare un array dinamico di numeri interi in C ++ utilizzando la newparola chiave?
Come creare un array dinamico di numeri interi in C ++ utilizzando la newparola chiave?
Risposte:
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
Non dimenticare di deleteogni array con cui assegni new.
delete, il tuo codice è sbagliato.
A partire da C ++ 11, esiste un'alternativa sicura a new[]e delete[]che è zero overhead a differenza di std::vector:
std::unique_ptr<int[]> array(new int[size]);
In C ++ 14:
auto array = std::make_unique<int[]>(size);
Entrambi i precedenti si basano sullo stesso file di intestazione, #include <memory>
Potresti prendere in considerazione l'utilizzo della libreria di modelli standard. È semplice e facile da usare, inoltre non devi preoccuparti delle allocazioni di memoria.
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::vectorcon il costruttore appropriato funziona davvero bene e dovrebbe essere indicato come alternativa. A volte le persone fanno la domanda male e questo potrebbe contare come uno di quei casi: è molto breve e non fornisce alcuna motivazione per la preferenza new.
new[]posto di std::vector.
deletenulla manualmente, mai. Inoltre, std::vectorè un array dinamico e non fa nulla con un elenco collegato. È solo un involucro attorno a un pezzo di memoria.
newe deleteper implementare i wrapper. Il punto è che non gestisci una risorsa e la usi, fai l'una o l'altra.
new[]possono essere sostituite con std::vector. E poiché std::vectorsepara correttamente la gestione delle risorse dall'utilizzo delle risorse (SBRM), dovremmo farlo.
int* array = new int[size];
std::vector::data()funzione membro restituirà l'array grezzo sottostante quando necessario.
operator&piuttosto che data()ottenere un puntatore da un vettore, ma è vero che un vettore fornisce la garanzia di contiguità necessaria per la compatibilità con le funzioni che si aspettano matrici.
Non appena la domanda riguarda un array dinamico, potresti non solo creare un array con dimensioni variabili, ma anche modificarne le dimensioni durante il runtime. Ecco un esempio con memcpy, puoi usare anche memcpy_so std::copy. A seconda del compilatore, <memory.h>o <string.h>potrebbe essere richiesto. Quando si utilizza questa funzione, si alloca una nuova regione di memoria, si copiano i valori delle regioni di memoria originali e quindi si rilasciano.
// 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;
Puoi usare la costante 4 invece di sizeof(int).
alloca dinamicamente un po 'di memoria utilizzando 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;
}
Il codice sopra funziona, la dimensione massima dell'array float o int che potrebbe essere definita era con dimensione 2095879 e la condizione di uscita sarebbe stata un numero di input iniziale diverso da zero
std::vector<int>. E un libro .