Ответ 1
Конечно, просто используйте ()
для инициализации значения:
int* ptr = new int[size]();
(взято из этого ответа к моему ранее близкому вопросу)
Мне нужно динамически создать массив целых чисел. Я обнаружил, что при использовании статического массива синтаксис
int a [5]={0};
правильно инициализирует значение всех элементов в 0.
Есть ли способ сделать что-то подобное при создании динамического массива вроде
int* a = new int[size];
без необходимости перебирать все элементы массива? или, возможно, присвоение значения циклом for по-прежнему является оптимальным способом? Благодаря
Конечно, просто используйте ()
для инициализации значения:
int* ptr = new int[size]();
(взято из этого ответа к моему ранее близкому вопросу)
Я бы сделал:
int* a = new int[size];
memset(a, 0, size*sizeof(int));
Я бы посоветовал использовать std::vector<int>
или std::array<int,5>
Значение инициализирует элементы с помощью ()
Пример:
int *p = new int[10]; // block of ten uninitialized ints
int *p2 = new int[10](); // block of ten ints value initialized to 0
Для инициализации с другими значениями, отличными от 0,
для массива указателей:
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;
Для массива без указателя
int size = 10;
int initVal = 47;
int arr[size];
std::fill_n(arr, size, initVal);
Работает очень много для любого DataType!
! Будьте осторожны, некоторые компиляторы могут не жаловаться на доступ к значению из диапазона массива, который может вернуть ненулевое значение
int *a=new int[n];
memset(a, 0, n*sizeof(int));
Это устанавливает для всех байтов массива значение 0. Для char *
тоже можно использовать memset.
См. http://www.cplusplus.com/reference/clibrary/cstring/memset/ для более формального определения и использования.