Vous ne devez pas utiliser des vecteurs. Si vous voulez coller avec des tableaux simples, vous pouvez faire quelque chose comme ceci:
int arr[] = new int[15];
unsigned int arr_length = 0;
Maintenant, si vous voulez ajouter un élément à la fin du tableau, vous pouvez le faire:
if (arr_length < 15) {
arr[arr_length++] = <number>;
} else {
// Handle a full array.
}
Ce n'est pas aussi court et gracieux que l'équivalent PHP, mais il accomplit ce que vous essayiez de faire. Pour vous permettre de modifier facilement la taille du tableau dans le futur, vous pouvez utiliser 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.
}
Cela simplifie grandement la gestion de la baie dans le futur. En changeant 15 à 100, la taille du tableau sera modifiée correctement dans l'ensemble du programme. Notez que vous devrez définir le tableau à la taille maximale attendue, car vous ne pouvez pas le modifier une fois le programme compilé. Par exemple, si vous avez un tableau de taille 100, vous ne pouvez jamais insérer 101 éléments.
Si vous utilisez des éléments hors la fin du tableau, vous pouvez le faire:
if (arr_length > 0) {
int value = arr[arr_length--];
} else {
// Handle empty array.
}
Si vous voulez être en mesure de supprimer des éléments hors début, (soit une FIFO), la solution devient plus compliqué. Vous avez également besoin d'un index de début et de fin.
#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.
}
Ici, nous utilisons l'opérateur de module (%) pour provoquer l'enroulement des index. Par exemple, (99 + 1)% 100 est 0 (un incrément d'enrobage). Et (99 + 99)% 100 est 98 (une diminution d'emballage). Cela vous permet d'éviter les instructions if et de rendre le code plus efficace.
Vous pouvez également voir rapidement à quel point le #define est utile lorsque votre code devient plus complexe.Malheureusement, même avec cette solution, vous ne pouvez jamais insérer plus de 100 éléments (ou tout autre maximum que vous avez défini) dans le tableau. Vous utilisez également 100 octets de mémoire même si un seul élément est stocké dans le tableau.
C'est la principale raison pour laquelle d'autres ont recommandé des vecteurs. Un vecteur est géré dans les coulisses et une nouvelle mémoire est allouée à mesure que la structure se développe. Il n'est toujours pas aussi efficace qu'un tableau dans des situations où la taille des données est déjà connue, mais dans la plupart des cas, les différences de performances ne seront pas importantes. Il y a des compromis à chaque approche et il est préférable de connaître les deux.
En fait, "que les codes" ne compile même pas. "int [] arr" n'est pas la façon dont vous déclarez un tableau en C/C++ - c'est "int arr []". Mais votre code a des problèmes plus graves, auxquels les autres réponses répondent. –