Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация двухмерного массива 
:(
    Опции темы
NDQuattro
Дата 16.4.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 18.7.2008
Где: Украина

Репутация: нет
Всего: нет



Код

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}};
PM MAIL   Вверх
Alca
Дата 16.4.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



memset, ZeroMemory


--------------------
PM WWW ICQ Skype Jabber   Вверх
NDQuattro
Дата 16.4.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 18.7.2008
Где: Украина

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) NDQuattro - 16.4.2009, 18:44
PM MAIL   Вверх
Anikmar
Дата 16.4.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(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}}; 

Если у вас готовый список для инициализации - делайте статический массив.
PM MAIL ICQ   Вверх
J0ker
Дата 16.4.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(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. так статический массив можно инициализировать только при объявлении


--------------------
user posted image
PM MAIL   Вверх
NDQuattro
Дата 16.4.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 18.7.2008
Где: Украина

Репутация: нет
Всего: нет



Anikmar, 
J0ker, 
статический я то сделал, просто думал есть все-таки какой нибудь вариант реализовать задуманное..
Спасибо во всяком случае.
PM MAIL   Вверх
Anikmar
Дата 16.4.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



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

Варианты всегда есть. Например: сохраняете список инициализации в файле, после создания динамического массива считываете его из файла.
PM MAIL ICQ   Вверх
mrbrooks
Дата 16.4.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



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

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

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

PM MAIL   Вверх
NDQuattro
Дата 16.4.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 18.7.2008
Где: Украина

Репутация: нет
Всего: нет



mrbrooks, идея конечно хорошая smile  но мне туда не рандомные надо пихать-)

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

благодарю, это хороший выход.
PM MAIL   Вверх
mrbrooks
Дата 16.4.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



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

дык никто и не заставляет - пихай что хошь и откуда хошь. главное циклы используй  - как вариант есесно smile 
PM MAIL   Вверх
NDQuattro
Дата 16.4.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 18.7.2008
Где: Украина

Репутация: нет
Всего: нет



mrbrooks,  да понимаю я тебя конечно! 
зы. не тупой) просто среду надо подучить, или выучить smile 
PM MAIL   Вверх
math64
Дата 17.4.2009, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Код

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];
}


PM   Вверх
Anikmar
Дата 17.4.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



math64
Тогда 2 массива одновременно в памяти висеть будут.
PM MAIL ICQ   Вверх
math64
Дата 17.4.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



При использовании кода:
Код

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);


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.