Подтвердить что ты не робот

Начальное значение С++ динамического массива

Мне нужно динамически создать массив целых чисел. Я обнаружил, что при использовании статического массива синтаксис

int a [5]={0};

правильно инициализирует значение всех элементов в 0.

Есть ли способ сделать что-то подобное при создании динамического массива вроде

int* a = new int[size];

без необходимости перебирать все элементы массива? или, возможно, присвоение значения циклом for по-прежнему является оптимальным способом? Благодаря

4b9b3361

Ответ 1

Конечно, просто используйте () для инициализации значения:

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

(взято из этого ответа к моему ранее близкому вопросу)

Ответ 2

Я бы сделал:

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

Ответ 3

Я бы посоветовал использовать std::vector<int> или std::array<int,5>

Ответ 4

Значение инициализирует элементы с помощью ()

Пример:

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

Ответ 5

Для инициализации с другими значениями, отличными от 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!

! Будьте осторожны, некоторые компиляторы могут не жаловаться на доступ к значению из диапазона массива, который может вернуть ненулевое значение

Ответ 6

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

Это устанавливает для всех байтов массива значение 0. Для char * тоже можно использовать memset. См. http://www.cplusplus.com/reference/clibrary/cstring/memset/ для более формального определения и использования.