Usted no tiene que utilizar vectores. Si desea seguir con matrices de fricción, se puede hacer algo como esto:
int arr[] = new int[15];
unsigned int arr_length = 0;
Ahora, si desea agregar un elemento al final de la matriz, se puede hacer esto:
if (arr_length < 15) {
arr[arr_length++] = <number>;
} else {
// Handle a full array.
}
No es tan corto y elegante como el equivalente en PHP, pero logra lo que intentaba hacer. Para permitirle cambiar fácilmente el tamaño de la matriz en el futuro, puede usar 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.
}
Esto hace que sea mucho más fácil administrar la matriz en el futuro. Al cambiar de 15 a 100, el tamaño de la matriz se cambiará correctamente en todo el programa. Tenga en cuenta que deberá establecer la matriz en el tamaño máximo esperado, ya que no puede cambiarla una vez que se haya compilado el programa. Por ejemplo, si tiene una matriz de tamaño 100, nunca podría insertar 101 elementos.
Si va a utilizar los elementos de la final de la matriz, se puede hacer esto:
if (arr_length > 0) {
int value = arr[arr_length--];
} else {
// Handle empty array.
}
Si usted quiere ser capaz de eliminar elementos fuera el principio, (es decir, un FIFO), la solución se vuelve más complicado. También necesita un índice inicial y final.
#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.
}
Aquí, estamos utilizando el operador de módulo (%) para hacer que los índices se envuelvan. Por ejemplo, (99 + 1)% 100 es 0 (un incremento de envoltura). Y (99 + 99)% 100 es 98 (una disminución de envoltura). Esto le permite evitar declaraciones if y hacer que el código sea más eficiente.
También puede ver rápidamente qué tan útil es #define a medida que su código se vuelve más complejo.Desafortunadamente, incluso con esta solución, nunca podría insertar más de 100 elementos (o el máximo que configure) en la matriz. También está utilizando 100 bytes de memoria, incluso si solo se almacena 1 elemento en la matriz.
Esta es la razón principal por la que otros tienen vectores recomendados. Un vector se gestiona detrás de escena y se asigna nueva memoria a medida que la estructura se expande. Todavía no es tan eficiente como una matriz en situaciones donde el tamaño de los datos ya es conocido, pero para la mayoría de los propósitos, las diferencias de rendimiento no serán importantes. Hay intercambios para cada enfoque y lo mejor es conocer ambos.
En realidad, "that codes" ni siquiera compila. "int [] arr" no es como usted declara una matriz en C/C++ - es "int arr []". Pero su código tiene problemas más graves, que las otras respuestas abordan. –