Инициализация n-мерного массива нулями

267
25 декабря 2017, 13:31

Здравствуйте! Возможно, вопрос уже был, однако я усердно искал и не нашел. Как инициализировать динамический n-мерный массив нулями при объявлении? Допустим:

const double arr_size = 10;
double *parr_x1 = new double[arr_size]();

но, это инициализация 0 для одномерного массива. А как инициализировать, например, нечто подобное:

const double arr_size = 10;
double **parr_x2 = new double* [arr_size];
for (int i = 0; i < arr_size; i++)
    parr_x2[i] = new double [arr_size];

Я так полагаю, что добавление скобок в цикле не поможет?

Answer 1

Поможет... так и инициализируйте:

const size_t arr_size = 10;
double **parr_x2 = new double* [arr_size];
for (int i = 0; i < arr_size; i++)
    parr_x2[i] = new double [arr_size]{};

Убедитесь, что все занулено:

for(size_t i = 0; i < arr_size; ++i)
{
    for(size_t j = 0; j < arr_size; ++j)
    {
        cout << setw(5) << parr_x2[i][j];
    }
    cout << endl;
}
Answer 2

Так как память, выделенная под n-мерный массив, выделяется единым блоком памяти, можно воспользоваться функцией memset, которая сбросить каждый байт памяти в 0

#include <cstring>
std::memset(parr_x2, 0, sizeof(double)*arr_size*arr_size);
READ ALSO
Как заменить цвет текстуры?

Как заменить цвет текстуры?

Имеется текстура с текстомСам текст белый, фон прозрачный

225
Заполнение очереди из файла

Заполнение очереди из файла

Как заполнить стандартный контейнер очередь (queue) данными из файла с помощью стандартных алгоритмов?

278
Ошибка при инициализации vector&lt;string&gt;

Ошибка при инициализации vector<string>

Добрый день! Я студент технического вуза и самостоятельно пытаюсь выучить c++Что пытаюсь сделать :

254