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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массивы, вопросик 
:(
    Опции темы
ip127001
Дата 16.2.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Тут вопрос возник...
допустим есть массив mas[10][10][10];
генерируется число(ранд) от 0 до 10
mas перебирается в for и в каждой ячейке mas создается массив размерностью сгененрированного числа....

вопрос-как можно описать создаваемые массивы, если для случайного числа не будет ограничения в генерации....
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
threef
Дата 16.2.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




Код


typedef short * typ;
typ mas[10][10][10];
for(int i=0;i<10*10*10;i++)
   mas[0][0][i]=new short[rand()];



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


Эксперт
***


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

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



 Ничего не понятно... У тебя уже заданы размерности mas . Если это массив указателей на массивы переменной размерности - то так бы и написал. Тогда все просто
Код

char * mas[10][10][10];
...
for(int i = 0; i < 10 ; i++)
  for(int j = 0; j < 10 ; j++)
    for(int i = 0; k < 10 ; k++)
    {
        mas[i][j][k] = new int[rand() % 11];
     }

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


Бывалый
*


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

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



? что это..
ты создаешь
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Sartorius
Дата 16.2.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



threef, ты протестировал что написал? Массивы С - это не массивы фортрана. Элементы располагаются в памяти не подряд.
PM MAIL ICQ   Вверх
ip127001
Дата 16.2.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



да ебть...вы создаете в каждой ячейке (указателя на)3 мерного массива одномерный массив...
а мне надо в каждой ячейке создат массив рандомной !!!размерности!!!
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
zkv
Дата 16.2.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(ip127001 @  16.2.2007,  21:04 Найти цитируемый пост)
вопрос-как можно описать создаваемые массивы, если для случайного числа не будет ограничения в генерации....

я понял ты хочешь получить 10 массивов с неопределенными на этапе компиляции размерами?
например так: int **mas[10]; и все выделять динамически, через new, или (лучше) заюзать что нить типа std::vector
PM MAIL   Вверх
ip127001
Дата 16.2.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(zkv @  16.2.2007,  21:24 Найти цитируемый пост)
вопрос-как можно описать создаваемые массивы, если для случайного числа не будет ограничения в генерации....
    

я понял ты хочешь получить 10 массивов с неопределенными на этапе компиляции размерами?
например так: int **mas[10]; и все выделять динамически, через new, или (лучше) заюзать что нить типа std::vector

выделять хоть как...главно чтобы эффективно было для всех случаев...


с вектором не такого гемороя smile  smile ...не интересно

Добавлено @ 21:29 
я в mas[0] может быть и 2 мерный и 3 мерный и 100 мерный...как рандом укажет

Добавлено @ 21:39 
 smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
threef
Дата 16.2.2007, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

threef, ты протестировал что написал? Массивы С - это не массивы фортрана. Элементы располагаются в памяти не подряд. 

А как, через 1 ? Тестировал. Подряд.
Код

bool check()
{
   int a[3][4][5],*b=(int*)a;
   for(int _1=0;_1<3;_1++)
   for(int _2=0;_2<4;_2++)
   for(int _3=0;_3<5;_3++)
       if(b++!=&a[_1][_2][_3])
      {
         cout<<"3ndec \n";
         return false;
      }
    return true;
}


Это сообщение отредактировал(а) threef - 16.2.2007, 21:46
PM MAIL   Вверх
Sartorius
Дата 16.2.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ладно поофтопим. smile 
 Не подряд . Двумерный массив - это фактически массив указателей на массивы.
Код

int a[10][10];


по адресу &а - десять указателей на int.


попробуй такой код
Код

#include <iostream>
int main()
{
    int a[10][10];
    a[0][0] = 0;

    std::cout << (int)a[0];
}



ЗЫ У меня твоя функция false возвращает

Это сообщение отредактировал(а) Sartorius - 16.2.2007, 22:01
PM MAIL ICQ   Вверх
ip127001
Дата 16.2.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Sartorius @  16.2.2007,  21:51 Найти цитируемый пост)
Ладно поофтопим.  

эээээ....не флудим...режем по теме!

Добавлено @ 22:04 
ап
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
zkv
Дата 16.2.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(ip127001 @  16.2.2007,  21:54 Найти цитируемый пост)
ап 

чего ап то? Подсказать как при помощи new память выделять? В чем вопрос конкретно? 
PM MAIL   Вверх
threef
Дата 17.2.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вопрос, как сделать массив, состоящий из массивов разных размерностей. 
Ну, есть такой вариант: создать typedef нужное количество типов массивов и по рандомизатору выбирать нужный тип.
PM MAIL   Вверх
MAKCim
Дата 17.2.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Sartorius @  16.2.2007,  21:51 Найти цитируемый пост)
Не подряд . Двумерный массив - это фактически массив указателей на массивы.

нет
любой массив вида
Код

int _Nmatrix[A][B]...[N]

располагается в памяти линейно
это вам не
Код

int *...*_Nmatrix;


Добавлено @ 00:20 
Цитата(threef @  17.2.2007,  00:04 Найти цитируемый пост)
Вопрос, как сделать массив, состоящий из массивов разных размерностей. 

Код

std :: vector<std :: vector<int> > array;



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
ip127001
Дата 17.2.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



аааа...вектор не катит....

Добавлено @ 09:09 
вектор не может быть 3-х разрядным....вектор -это одномерный массив!!!!!!!!
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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