установка всех значений в динамическом массиве 2 d на заданное значение - PullRequest
0 голосов
/ 04 декабря 2011

Мне нужно настроить динамический 2-мерный массив, который будет равен x Количество строк на y количество столбцов. Этот массив был объявлен как перечислимый тип, и я хочу инициализировать все значения известным значением EMPTY. Есть ли способ сделать это с помощью одной команды, или мне нужно перебрать каждую строку / столбец и настроить его таким образом. Я знаю, что статические массивы можно сделать как Array [] [] = {EMPTY}, но я не могу заставить этот метод работать.

status ** seats;

seats = new status* [NO_OF_ROWS];// declare array with NO_OF_ROWS
for (row = 0; row < NO_OF_ROWS; row++)
   seats[row] = new status[NO_OF_SEATS]; 

Ответы [ 2 ]

3 голосов
/ 04 декабря 2011

Да:

#include <vector>

typedef std::vector< std::vector<status> > seat_type;

seat_type seats(NO_OF_ROWS, std::vector<status>(NO_OF_SEATS));

// now use seats[i][j] etc.

В C ++ «динамический массив» называется std::vector.


Если вы хотите избежать многих динамическихВы можете также выделить один вектор

std::vector<status> seats(NO_OF_ROWS * NO_OF_SEATS);

и получить к нему быстрый доступ, т.е. (i,j) th место равно seats[j + NO_OF_SEATS * i].

0 голосов
/ 04 декабря 2011

Вы можете попробовать использовать memset - как вы знаете, массивы в C внутренне определены как непрерывный блок памяти.memset, с другой стороны, это функция, которая заполняет определенный блок памяти определенным значением.

Теперь, поскольку ваш двумерный массив не является смежным (потому что у вас есть массив указателей),Вы не сможете вызвать 'memset' только один раз, но, по крайней мере, вы можете вызывать его для каждой строки, то есть вы будете называть его NO_OF_ROWS раз.

Это должно быть похоже на это (обратите внимание, что некоторыеможет потребоваться литье, а мой с ++ немного ржавый):

for (row = 0; row < NO_OF_ROWS; row++)
{
    seats[row] = new status[NO_OF_SEATS]; 
    memset(seats[row],EMPTY,NO_OF_SEATS*sizeof(status));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...