Re[2]: Многомерные массивы динамически
От: TruthfulBob  
Дата: 10.11.04 23:45
Оценка: -1
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Здравствуйте Аноним, вы писали:


А>>Здра

А>>Можно ли в С++ динамически создать мног. массив?

А>>double d[][];

А>>d = new double[10][5];

А>>или единств что возможно это


А>>double* d;

А>>d = new double[10*5];

А>>и потом мучаться конвертировать индексы?

А>>Спасибо

AVK>А может быть лучше потратить некоторое время на изучение стандартной библиотеки? Там есть такое понятие как std::valarray<T>, std::slice_array<T>. Как использовать — прекрасно описано у Страуструпа 22.4.5 — 22.4.6.


Дорогой Антон! Насчет прекрасно описано у Страуса — это Вы загнули. Вы хоть сами пробовли создать матрицу из valarray которую он описал и она якобы должна работать? Не работает она. Нужно еще прилично попариться, чтобы она зашевелилась.
Моя точка зрения на его труды простая: Да он создал хороший язык. Но описать его толком не смог. Видать не родился он писателем. А принципы языка крайне недружелюбны к пользователю, т.е. к нам. Недаром существует этот форум и MSDN, прежде всего чтобы мы могли все это использовать в реальности. И недаром, когда читаешь MSDN — все кристально ясно. Просто ребята из MS прилично потрудились, чтобы их студия реально приносила пользу и доход нам. А вот Страус не удосужился. Типа гений. Я тоже могу быть ооооочень большим гением, если не буду обьяснять, что же я такое сделал. Да вот только считаю это просто не приличным.
Для чего создавался язык? Прежде всего — для уменьшения наших усилий. А в реальности они все растут и растут.
И недаром MS создал .NET и тот резко стал везде использоваться.
По поводу создателей STL я ничего не скажу, т.к. все выражения исключительно нецензурные. Прошу не серчать.
Отсутсвие встроенного оптимизированного динамического массива в языке — чистый .... Закочите сами.
С уважением,
Bob
Re: Многомерные массивы динамически
От: Nuald Россия http://nuald.blogspot.com
Дата: 11.11.04 00:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Можно ли в С++ динамически создать мног. массив?


ИМХО, со скобками и указателями заморачиваться не стоит — потом такой код будет тяжело поддерживать, особенно если это будете делать не вы. Юзал boost::multi_array, понравилось...
Re[5]: Многомерные массивы динамически
От: McSeem2 США http://www.antigrain.com
Дата: 11.11.04 01:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Доказательство? Ооочень интересно было бы?


VD>По-моему, если написать грамотный хелпер-класс, то можно все сэмулировать. Многомерный массив всегда можно развернуть в одномерный (см. реализацию SafeArray), а удобства в работе можно скрыть за переопределением оператора [].


Может ты путаешь с разреженными массивами?
Вообще-то подобная задача называется NLM (non-linear mapping) и решается с помощью нейронных сетей. Решается достаточно хорошо, если надо увидеть глазами картину распределения кластеров многомерного пространства в 3D или даже в 2D. Но никак не в 1D! Здесь, как говорится, дружно едим конфетку "Обломиську".
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[3]: Многомерные массивы динамически
От: McSeem2 США http://www.antigrain.com
Дата: 11.11.04 01:35
Оценка:
Здравствуйте, TruthfulBob, Вы писали:

TB>Моя точка зрения на его труды простая: Да он создал хороший язык. Но описать его толком не смог. Видать не родился он писателем. А принципы языка крайне недружелюбны к пользователю, т.е. к нам. Недаром существует этот форум и MSDN, прежде всего чтобы мы могли все это использовать в реальности. И недаром, когда читаешь MSDN — все кристально ясно. Просто ребята из MS прилично потрудились, чтобы их студия реально приносила пользу и доход нам. А вот Страус не удосужился. Типа гений. Я тоже могу быть ооооочень большим гением, если не буду обьяснять, что же я такое сделал. Да вот только считаю это просто не приличным.


Очень удобное себе оправдание. "Я не гений, поскольку считаю что быть им неприлично". Шутка!

TB>Для чего создавался язык? Прежде всего — для уменьшения наших усилий. А в реальности они все растут и растут.

TB>И недаром MS создал .NET и тот резко стал везде использоваться.

Насчет Страуса Трупа как писателя — согласен, насчет MSDN — категорически не согласен. MSDN в основном представляет собой некий кастрированный вариант описания, сгенерированного при помощи Doxygen. Формально там все описано, но все настолько разобщено, что чтобы хоть что-то понять (читай — установить причинно-следственные связи) надо изрядно потрудиться. И если уж выбирать из двух зол, так лучше уж Страус, чем MSDN.

И если быть честными, то все пошло от Кернигана-Ричи, потом Страус подключился, ну а уж только потом-потом пошли всякие клоны типа Java и C#. По большому счету синтакс там — от C++, разве нет?

TB>По поводу создателей STL я ничего не скажу, т.к. все выражения исключительно нецензурные. Прошу не серчать.

TB>Отсутсвие встроенного оптимизированного динамического массива в языке — чистый .... Закочите сами.

Не скажите. Встроенный в язык динамический массив — безусловный маздай, поскольку не дает возможности контролировать распределение памяти. В результате чего, при активном его использовании, серверный демон рухнет через пару дней активного трепыхания. Просто из за фрагментации памяти. Отсюда вывод — не надо использовать встроенный в язык динамический массив. А нафига, спрашивается, он тогда нужен?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[3]: Многомерные массивы динамически
От: McSeem2 США http://www.antigrain.com
Дата: 11.11.04 04:27
Оценка:
TB>Дорогой Антон! Насчет прекрасно описано у Страуса — это Вы загнули. Вы хоть сами пробовли создать матрицу из valarray которую он описал и она якобы должна работать? Не работает она. Нужно еще прилично попариться, чтобы она зашевелилась.

Кстати, забыл упомянуть, что "прилично попариться" надо как раз благодаря "Дорогому Товартщу Микрософту", который ничтоже сумняшеся забубенил слова "min" и "max" в препроцессор.
Какое место за такие дела в культурном обществе пасатижами отщипывают?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[5]: Многомерные массивы динамически
От: McSeem2 США http://www.antigrain.com
Дата: 11.11.04 04:41
Оценка: +1
Здравствуйте, av, Вы писали:

av>1. a определяется как...

av>2. ...указатель на...
av>3. ...функцию, не принимающую параметров и возвращающую...
av>4. ...указатель на...
av>5. ...массив из 10...
av>6. ...указателей на...
av>7. ...char.

Круто компилируешь...
По мне, так лучше typedef. А уж если надо определить массив указателей на функции, возвращающие указатель на массив массивов функций другого типа... Формально такое объявление можно написать, но лучше-таки через typedef.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[3]: Многомерные массивы динамически
От: Анатолий Широков СССР  
Дата: 11.11.04 08:09
Оценка: :)
[offtop]
Долго же зрела Ваша мысль — сообщение Антона датировано 28.08.01, а сейчас, как никак, 2004 на дворе и 2005 на носу
[/offtop]
Re: Многомерные массивы динамически
От: Laurel  
Дата: 11.11.04 11:36
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Можно ли в С++ динамически создать мног. массив?

А>double d[][];
А>d = new double[10][5];
А>или единств что возможно это
А>double* d;
А>d = new double[10*5];
А>и потом мучаться конвертировать индексы?

Не понял, почему никто не предложил вариант (ответ с calloc я видел, но больно страшно это выглядит):

const int M = 10, N = 5;

double **d;

d = new double *[M];

for (int i = 0; i < M; i++)
{
    d[i] = new double[N];
}



Пользоваться d[i][j];

Чтобы освободить память:

for (int i = 0; i < M; i++)
{
    delete []d[i];
}

delete []d;
... << RSDN@Home 1.1.3 stable >>
Re: Многомерные массивы динамически
От: yxiie Украина www.enkord.com
Дата: 11.11.04 12:27
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здра

А>Можно ли в С++ динамически создать мног. массив?

А>double d[][];

А>d = new double[10][5];

А>или единств что возможно это


А>double* d;

А>d = new double[10*5];

А>и потом мучаться конвертировать индексы?

А>Спасибо

boost::multi_array однозначно
все велосипеды уже давно изобретены
... << RSDN@Home 1.1.3 stable >>
Re[2]: Многомерные массивы динамически
От: Аноним  
Дата: 11.11.04 12:35
Оценка:
Действительно развели такую дискусию на путом месте. Это же стандартный пример описанный в книга для начинающий программировать на C++.
Re: Многомерные массивы динамически
От: glyph  
Дата: 11.11.04 13:35
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здра

А>Можно ли в С++ динамически создать мног. массив?
А нет никакой ложки. Они все одномерные. Просто это один из способов адресации.
Re[2]: Многомерные массивы динамически
От: sva1509  
Дата: 11.11.04 17:33
Оценка:
Здравствуйте, glyph, Вы писали:

G>Здравствуйте, <Аноним>, Вы писали:


А>>Здра

А>>Можно ли в С++ динамически создать мног. массив?
G> А нет никакой ложки. Они все одномерные. Просто это один из способов адресации.

Абсолютно согласен !

Вы можете соэдать некий шаблон компилятору и динамически выделяя память адресовать ее через шаблон
Пример:

typedef int i[3][5]; //создаем шаблон

i *i2;   // создаем указатель типа шаблон
int *ii; // создаем линейный указатель

int main()
{
    i2=(i*)calloc(1,sizeof(i)); // Динамически резервируем память
    ii=(int*)i2; // Линейный указатель тудаже
    i2[0][1][1]=10; // в 0-ой элемент [1][1] заносим 10
    printf("%d",i2[0][1][1]); // отображение
        // ii[6] тоже будет равно 10
    free(i2); 
    getch();
    return(0);
}


Если же имелось ввиду создать некий абстрактный массив int i[][] аосле чего выделить память int [3][5]
и пытатся к ней обращатся по шаблонй i[3][5] то это средствами компилятора не возможно так как
копилятору не определен шаблон пересчета адресов.

С уважением Валерий.
Re[3]: Многомерные массивы динамически
От: Nuald Россия http://nuald.blogspot.com
Дата: 12.11.04 00:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Действительно развели такую дискусию на путом месте. Это же стандартный пример описанный в книга для начинающий программировать на C++.




Такие книги надо всенародно сжигать, а авторов отправлять на каторжные работы программировать на васике...
Re[4]: Многомерные массивы динамически
От: Laurel  
Дата: 12.11.04 12:13
Оценка:
Здравствуйте, Nuald, Вы писали:

А>>Действительно развели такую дискусию на путом месте. Это же стандартный пример описанный в книга для начинающий программировать на C++.


N>Такие книги надо всенародно сжигать, а авторов отправлять на каторжные работы программировать на васике...


Совершенно не согласен. Человек, задавший вопрос, явно только начинает разбираться с языком.
И учить его надо, двигаясь от простого к сложному, но никак не наоборот. boost::multi_array хорошо. Но человек, который второй раз в жизни пишет программу на С++ может потерять всякое желание писать третью, взглянув на

template<typename T, std::size_t NumDims,
  typename Allocator = std::allocator<T> >
class multi_array;

и т.д.

Очень хочу посмотреть с чего Вы начинали программировать вообще и на С++ в частности. Боюсь, не с boost и не с STL.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Многомерные массивы динамически
От: yxiie Украина www.enkord.com
Дата: 12.11.04 12:26
Оценка:
Здравствуйте, Laurel, Вы писали:

L> Очень хочу посмотреть с чего Вы начинали программировать вообще и на С++ в частности. Боюсь, не с boost и не с STL.


Я начинал программировать на С++ с написания ECMA-262 подобного скриптового языка
И у меня даже получилось
... << RSDN@Home 1.1.3 stable >>
Re[5]: Многомерные массивы динамически
От: Nuald Россия http://nuald.blogspot.com
Дата: 13.11.04 00:22
Оценка:
Здравствуйте, Laurel, Вы писали:

L> Очень хочу посмотреть с чего Вы начинали программировать вообще и на С++ в частности. Боюсь, не с boost и не с STL.


Я вообще начинал с С, т.к. в то время С++ еще как такого не было в том виде, который есть сейчас. Но что пригодно для С, не должно использоваться в С++, т.к. вся его мощь именно в шаблонах, строгой типизации и т.п., но никак не в адресной арифметике. Если человек начнет программировать с адресной арифметики, то он разочаруется намного раньше в С++...
Re[6]: Многомерные массивы динамически
От: Шахтер Интернет  
Дата: 13.11.04 15:53
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Здравствуйте, Laurel, Вы писали:


L>> Очень хочу посмотреть с чего Вы начинали программировать вообще и на С++ в частности. Боюсь, не с boost и не с STL.


N>Я вообще начинал с С, т.к. в то время С++ еще как такого не было в том виде, который есть сейчас. Но что пригодно для С, не должно использоваться в С++, т.к. вся его мощь именно в шаблонах, строгой типизации и т.п., но никак не в адресной арифметике. Если человек начнет программировать с адресной арифметики, то он разочаруется намного раньше в С++...


С++ — адресная арифметика = С#

Мощь C++ -- в том что он основан на С. И типизация в С не менее строгая, чем в С++. И адресная арифметика, нравится это кому-то или нет -- основополагающая часть языка.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.