Non è necessario usare vettori. Se si vuole attaccare con gli array semplici, si può fare qualcosa di simile:
int arr[] = new int[15];
unsigned int arr_length = 0;
Ora, se si desidera aggiungere un elemento alla fine dell'array, si può fare questo:
if (arr_length < 15) {
arr[arr_length++] = <number>;
} else {
// Handle a full array.
}
Non è il più breve e grazioso dell'equivalente PHP, ma realizza ciò che stavi tentando di fare. Per consentire di modificare facilmente la dimensione della matrice in futuro, è possibile utilizzare un #define.
#define ARRAY_MAX 15
int arr[] = new int[ARRAY_MAX];
unsigned int arr_length = 0;
if (arr_length < ARRAY_MAX) {
arr[arr_length++] = <number>;
} else {
// Handle a full array.
}
Ciò rende molto più semplice la gestione dell'array in futuro. Cambiando da 15 a 100, la dimensione dell'array verrà cambiata correttamente nell'intero programma. Si noti che sarà necessario impostare la matrice sulla dimensione massima prevista, in quanto non è possibile modificarla una volta che il programma è stato compilato. Ad esempio, se si dispone di un array di dimensioni 100, non è mai possibile inserire 101 elementi.
Se si prevede di utilizzare gli elementi fuori la fine dell'array, si può fare questo:
if (arr_length > 0) {
int value = arr[arr_length--];
} else {
// Handle empty array.
}
Se si vuole essere in grado di eliminare gli elementi fuori l'inizio, (vale a dire un FIFO), la soluzione diventa più complicato. Hai bisogno anche di un indice di inizio e fine.
#define ARRAY_MAX 15
int arr[] = new int[ARRAY_MAX];
unsigned int arr_length = 0;
unsigned int arr_start = 0;
unsigned int arr_end = 0;
// Insert number at end.
if (arr_length < ARRAY_MAX) {
arr[arr_end] = <number>;
arr_end = (arr_end + 1) % ARRAY_MAX;
arr_length ++;
} else {
// Handle a full array.
}
// Read number from beginning.
if (arr_length > 0) {
int value = arr[arr_start];
arr_start = (arr_start + 1) % ARRAY_MAX;
arr_length --;
} else {
// Handle an empty array.
}
// Read number from end.
if (arr_length > 0) {
int value = arr[arr_end];
arr_end = (arr_end + ARRAY_MAX - 1) % ARRAY_MAX;
arr_length --;
} else {
// Handle an empty array.
}
Qui, stiamo utilizzando l'operatore modulo (%) per causare l'inclusione degli indici. Ad esempio, (99 + 1)% 100 è 0 (un incremento di avvolgimento). E (99 + 99)% 100 è 98 (un decremento di avvolgimento). Questo ti permette di evitare dichiarazioni if e rendere il codice più efficiente.
È anche possibile vedere quanto è utile il #define quando il codice diventa più complesso.Sfortunatamente, anche con questa soluzione, non è mai possibile inserire oltre 100 elementi (o qualsiasi altro valore massimo impostato) nell'array. Si stanno anche utilizzando 100 byte di memoria anche se nella matrice è presente solo 1 elemento.
Questo è il motivo principale per cui altri hanno consigliato i vettori. Un vettore è gestito dietro le quinte e la nuova memoria viene allocata man mano che la struttura si espande. Non è ancora efficiente come una matrice in situazioni in cui la dimensione dei dati è già nota, ma per la maggior parte dei casi le differenze di prestazioni non saranno importanti. Ci sono dei compromessi per ciascun approccio ed è meglio sapere entrambi.
In realtà, "quel codice" non viene nemmeno compilato. "int [] arr" non è il modo in cui si dichiara un array in C/C++: è "int arr []". Ma il tuo codice ha problemi più seri, che rispondono alle altre risposte. –