serie - c++ valor inicial de la matriz dinámica
funcion de transferencia circuito rlc ejercicios resueltos (6)
Claro, solo usa ()
para inicialización de valor:
int* ptr = new int[size]();
(tomado de esta respuesta a mi pregunta anterior estrechamente relacionada)
Necesito crear dinámicamente una matriz de enteros. He encontrado que al usar una matriz estática la sintaxis
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 un array? ¿O tal vez asignar el valor con un bucle for sigue siendo la manera óptima de hacerlo? Gracias
Lo haría:
int* a = new int[size];
memset(a, 0, size*sizeof(int));
Para inicializar con valores distintos a 0,
para la 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 matriz no puntero
int size = 10;
int initVal = 47;
int arr[size];
std::fill_n(arr, size, initVal);
Funciona bastante para cualquier DataType!
Tenga cuidado, es posible que algunos compiladores no se quejen de acceder a un valor fuera del rango de la matriz que podría devolver un valor distinto de cero.
Te aconsejo que uses std::vector<int>
o std::array<int,5>
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
int *a=new int[n];
memset(a, 0, n*sizeof(int));
Eso establece todos los bytes de la matriz en 0. Para char *
también, podría usar memset. Consulte http://www.cplusplus.com/reference/clibrary/cstring/memset/ para obtener una definición y uso más formal.