¿Inicialización de todos los elementos de una matriz a un valor predeterminado en C++?
Notas de C++: Inicialización de matrices tiene una buena lista sobre la inicialización de matrices. tengo un
int array[100] = {-1};
esperando que esté lleno con -1 pero no es así, solo el primer valor lo es y el resto son 0 mezclados con valores aleatorios.
El código
int array[100] = {0};
funciona bien y establece cada elemento en 0.
¿Qué me falta aquí? ¿No se puede inicializarlo si el valor no es cero?
Y 2: ¿La inicialización predeterminada (como la anterior) es más rápida que el bucle habitual que recorre toda la matriz y asigna un valor o hace lo mismo?
Usando la sintaxis que usaste,
int array[100] = {-1};
dice "establecer el primer elemento en -1
y el resto en 0
" ya que todos los elementos omitidos están configurados en 0
.
En C++, para configurarlos todos en -1
, puedes usar algo como std::fill_n
(de <algorithm>
):
std::fill_n(array, 100, -1);
En el portátil C, tienes que crear tu propio bucle. Hay extensiones del compilador o puede depender del comportamiento definido por la implementación como acceso directo si eso es aceptable.
Hay una extensión para el compilador gcc que permite la sintaxis:
int array[100] = { [0 ... 99] = -1 };
Esto establecería todos los elementos en -1.
Esto se conoce como "Inicializadores designados". Consulte aquí para obtener más información.
Tenga en cuenta que esto no está implementado para el compilador gcc c++.