Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Инициализация двухмерного массива


Автор: NDQuattro 16.4.2009, 18:01
Код

float **b;
b = new float *[3];
for (int i=0; i<3; i++)
b[i] = new float [5];


можно его теперь инициализировать? 
наверное да, но как это сделать?

Например такими значениями:
{{2.6,3.7,2.1,2.7,3.6},
  {3.6,2.6,1.7,1.5,1.4},
  {1.4,4.3,3.8,1.4,1.5}};

Автор: Alca 16.4.2009, 18:06
memset, ZeroMemory

Автор: NDQuattro 16.4.2009, 18:13
Alca, Вы имеете ввиду memset'ом целые строки сразу заполнять(разными значениями) smile ? Так разве можно?

Автор: Anikmar 16.4.2009, 19:43
Цитата(NDQuattro @  16.4.2009,  18:01 Найти цитируемый пост)
Например такими значениями:
{{2.6,3.7,2.1,2.7,3.6},
  {3.6,2.6,1.7,1.5,1.4},
  {1.4,4.3,3.8,1.4,1.5}}; 

Если у вас готовый список для инициализации - делайте статический массив.

Автор: J0ker 16.4.2009, 20:05
Цитата(NDQuattro @ 16.4.2009,  18:01)
Код

float **b;
b = new float *[3];
for (int i=0; i<3; i++)
b[i] = new float [5];


можно его теперь инициализировать? 
наверное да, но как это сделать?

Например такими значениями:
{{2.6,3.7,2.1,2.7,3.6},
  {3.6,2.6,1.7,1.5,1.4},
  {1.4,4.3,3.8,1.4,1.5}};

нет
1. n-мерные (n > 1) динамические и статические массивы имеют разную структуру
2. так статический массив можно инициализировать только при объявлении

Автор: NDQuattro 16.4.2009, 20:54
Anikmar, 
J0ker, 
статический я то сделал, просто думал есть все-таки какой нибудь вариант реализовать задуманное..
Спасибо во всяком случае.

Автор: Anikmar 16.4.2009, 21:04
Цитата(NDQuattro @  16.4.2009,  20:54 Найти цитируемый пост)
статический я то сделал, просто думал есть все-таки какой нибудь вариант реализовать задуманное..
Спасибо во всяком случа

Варианты всегда есть. Например: сохраняете список инициализации в файле, после создания динамического массива считываете его из файла.

Автор: mrbrooks 16.4.2009, 21:24
NDQuattro, чем тебе не нравится инициализация двухмерного массива двумя циклами с использованием генератора случайных чисел камрад?  smile

Добавлено через 4 минуты и 3 секунды
типа этого 
Код

    for (int i = 0; i<row; i++)
        for (int j = 0; j<col; j++) arr[i][j] = rand()%100;

Автор: NDQuattro 16.4.2009, 21:43
mrbrooks, идея конечно хорошая smile  но мне туда не рандомные надо пихать-)

Цитата(Anikmar @  16.4.2009,  21:04 Найти цитируемый пост)
сохраняете список инициализации в файле, после создания динамического массива считываете его из файла. 

благодарю, это хороший выход.

Автор: mrbrooks 16.4.2009, 21:56
Цитата(NDQuattro @  16.4.2009,  21:43 Найти цитируемый пост)
но мне туда не рандомные надо пихать-)

дык никто и не заставляет - пихай что хошь и откуда хошь. главное циклы используй  - как вариант есесно smile 

Автор: NDQuattro 16.4.2009, 22:22
mrbrooks,  да понимаю я тебя конечно! 
зы. не тупой) просто среду надо подучить, или выучить smile 

Автор: math64 17.4.2009, 10:32
Код

static float[3][5] data =
{{2.6,3.7,2.1,2.7,3.6},
  {3.6,2.6,1.7,1.5,1.4},
  {1.4,4.3,3.8,1.4,1.5}};
float **b;
b = new float *[3];
for (int i=0; i<3; i++) {
  b[i] = new float [5];
  for (int j=0; j<5; j++)
    b[i][j] = data[i][j];
}


Автор: Anikmar 17.4.2009, 10:43
math64
Тогда 2 массива одновременно в памяти висеть будут.

Автор: math64 17.4.2009, 13:14
При использовании кода:
Код

b[0][0]=2.6;
b[0][1]=3.7;
b[0][2]=2.1;
b[0][3]=2.7;
b[0][4]=3.6;
b[1][0]=3.6;
b[1][1]=2.6;
b[1][2]=1.7;
b[1][3]=1.5;
b[1][4]=1.4;
b[2][0]=1.4;
b[2][1]=4.3;
b[2][1]=3.8;
b[2][1]=1.4;
b[2][1]=1.5;


реально памяти будет тратиться больше, чем при копировнии (как в моём предыдущем коде).
Альтернатива: прочитать данные из файла
PS: в моём предыдущем коде лучше объявить
Код

static const float[3][5] data = ...;


чтобы data выделилось в сегменте констант.

Добавлено через 3 минуты и 48 секунд
Ну ещё один вариант:
Код

void initArray(float**b,int n, int m,...);
initArray(b, 3, 5,
    2.6,3.7,2.1,2.7,3.6,
   3.6,2.6,1.7,1.5,1.4,
  1.4,4.3,3.8,1.4,1.5);


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)