¿Inicialización de todos los elementos de una matriz a un valor predeterminado en C++?

Resuelto Milan asked hace 15 años • 12 respuestas

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?

Milan avatar Jul 01 '09 03:07 Milan
Aceptado

Usando la sintaxis que usaste,

int array[100] = {-1};

dice "establecer el primer elemento en -1y 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.

Evan Teran avatar Jun 30 '2009 20:06 Evan Teran

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++.

Callum avatar Jun 30 '2009 20:06 Callum