2012-04-24 33 views
20

Necesito crear dinámicamente una matriz de números enteros. He encontrado que cuando se utiliza una matriz estática la sintaxisC++ valor inicial de la matriz dinámica

int a [5]={0}; 

inicializa correctamente el valor de todos los elementos a 0.

¿Hay una manera de hacer algo similar al crear una matriz dinámica como

int* a = new int[size]; 

sin tener que recorrer todos los elementos de la matriz? o tal vez asignar el valor con un bucle for sigue siendo la mejor manera de hacerlo. Gracias

+2

Usted quiere decir 'new int [tamaño]'? – kennytm

+2

¿No puedes usar un 'std :: vector'? Esto inicializaría todos los valores a cero (o cualquier otro valor que elija) – Nick

+0

@KennyTM edite el error, – Arno

Respuesta

30

Claro, sólo tiene que utilizar para () valor de inicialización:

int* ptr = new int[size](); 

(tomado de this answer a mi pregunta estrechamente relacionada anterior)

+1

@shartptooth Intenté y obtengo un error: error: ISO C++ prohíbe la inicialización en el array nuevo [-fpermissive] – Arno

+0

@Arno que debería compilarse. Qué compilador estas usando? – juanchopanza

+0

@juanchopanza GCC compilador g ++ dentro de eclipse cdt – Arno

4

lo haría:

int* a = new int[size]; 
memset(a, 0, size*sizeof(int)); 
+0

funciona perfectamente, gracias! – Arno

+6

@Arno La forma correcta es la respuesta de sharptooth. –

+1

'sin tener que pasar por todos los elementos de la matriz' - ¿No es eso lo que estás haciendo con 'memset'? Aunque ese memset sin dudas será optimizado para la máquina. –

4

os aconsejo utilizar std::vector<int> o std::array<int,5>

2

Valor inicializar los elementos con ()

Ejemplo:

int *p = new int[10];  // block of ten uninitialized ints 
int *p2 = new int[10](); // block of ten ints value initialized to 0 
2

Para inicializar con otros valores de 0,

para matriz de punteros:

int size = 10; 
int initVal = 47; 
int *ptrArr = new int[size]; 
std::fill_n(ptrArr, size, initVal); 
std::cout << *(ptrArr + 4) << std::endl; 
std::cout << ptrArr[4] << std::endl; 

Para array no puntero

int size = 10; 
int initVal = 47; 
int arr[size]; 
std::fill_n(arr, size, initVal); 

¡Funciona bastante para cualquier DataType!

! Tenga cuidado, algunos compiladores no podría quejarse acceder a un valor fuera del rango de la matriz que podría devolver un valor distinto de cero

Cuestiones relacionadas