По мере разработки игры неизбежно будут возникать вопросы, как написать то или се в коде. Поэтому решил создать соответствующую тему, в которой будем помогать друг другу.
Вот впервые столкнулся с проблемой в C++ создать многомерный динамический массив. У меня куча книг по C++ , но оказалось, что ни в одной толком ничего не написано и уж тем более ничего не объяснено по этому вопросу. Проблема такая: нужно создать трехмерный динамический массив и в дальнейшем присвоить ему значения. Как это сделать с помощью оператров new ?
<div class='quotetop'>Цитата</div>Не знаю.поройся в в манах по STL (надеюсь знаеш что таеое)[/b]
<div class='quotetop'>Цитата</div>Что за типы? Мне динамическую величину создать надо и все. А точнее многомерный массив. И узнать как с ним работать. Как ему присвоить значения и как вдальнейшем с ним оперировать.на пример типа vector
многомерные строятся на его основе с помощью еще одного типа slice
[/b]
<div class='quotetop'>Цитата</div>В книгах рекомендуется new для создания и delete для удаления. Но там сложности с указателями возникают.о new забудь
[/b]
Короче хочу создать трехмерный динамический массив типа float или GLfloat array[n][3][3], где n - число треугольников на сфере, 3 - число точек в треугольнике, 3 - число координат точки. Потом этот массив должен принять определенные значения, с помощью которых определяется следующий динамический массив (для следующей итерации), потом старый массив удаляется и создается заново с размерность нового. Старый принимает значения нового, потом новый удаляется. Все это происходит в цикле. Вот так вот.
...а также ссылки на соседние треугольники, хранение ребер как отдельных объектов, связи между ребрами, образующими общую границу, координаты центра, направления на центры соседних треугольников.
слайсы? не уверен, что это полезно. В чем принципиальная разница:
listobject[idx].X или
listobject.sliceX[idx] ?
vector<vector<vector<...>>>
или массив указателей на указатели на массивы
ps: на c++ не пишу
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
просто в C++ отсутствует встроенная поддержка массивов размерности больше 1. Была когда-то поддержка двумерных, унаследованая еще от С, но от неё отказались (сам как-то столкнулся) -- неэффективно.
Так что, сейчас возможности другие -- или использовать слайсы. Или, как уже предлагали, определять класс Triangle и хранить в масиве уже его.
<div class='quotetop'>Цитата</div>Э-эх. Учить вас еще и учить.Короче хочу создать трехмерный динамический массив типа float или GLfloat array[n][3][3], где n - число треугольников на сфере, 3 - число точек в треугольнике, 3 - число координат точки. Потом этот массив должен принять определенные значения, с помощью которых определяется следующий динамический массив (для следующей итерации), потом старый массив удаляется и создается заново с размерность нового. Старый принимает значения нового, потом новый удаляется. Все это происходит в цикле. Вот так вот.[/b]
Зачем тебе динамический массив здесь? В цикле?
У тебе что, количество вершин так резко меняется???
Ты что не понимаеш, что каждый раз создавая/удаляя массив занимаешся выделением/удалением памяти под него. Да еще в цикле.
Зачем тебе вообще динамический массив? Чем тебе не понравилась локальная переменная, которая стековая?
Столько народу,потратило столько времени, чтобы наработать достаточное количество готовых эффективных решений для С++. И все равно, каждый новичек тянет за собой тучу неэффективных, заученных из других языков.
А потом еще кричат -- "С++ плохой язык".
http://www.codenet.ru/progr/cpp/stl/istl.php
Вот. Неплохое введение в СТЛ
чтобы не говорили что я посылаю куда-то не туда.
Вот цитата оттуда
<div class='quotetop'>Цитата</div>вообщеКонтейнеры
Библиотека STL имеет в своем арсенале элементы, называемые контейнерами. Контейнеры - это объекты, хранящие в себе другие объекты. В STL таких контейнеров десять:
vector - массив с произвольным доступом, чаще всего применяемый в тех случаях, когда надо последовательно добавлять данные в конец цепочки;[/b]
контейнеры СТЛ разработаны так, что их можно использовать как локальные стековые (а не динамические, хотя и как динамические можно) -- все сложности УЖЕ упрятаны внутри, нет нужды лезть разбиратся с указателями.
Хм...
я там немного ошибся
для такого массива лучше взять класс valarray
Вот.
http://www.dbebooks.ru/4/jazyki-programmir...istov-na-s.html
Вообще книжку можно скачать
Кто ищет, то найдет, кто хочет, тот добьётся.
[code]
//создание и удаления двухмерного динамического массива
int **pArr = new int*[dim1];
for (i = 0; i < dim1; i++) pArr[i] = new int[dim2];
for (i = 0; i < dim1; i++) delete[] pArr[i];
delete[]pArr;
//создание и удаления трехмерного динамического массива
int ***ppArr;
ppArr = new int**[dim1];
for (i = 0; i < dim1; i++) ppArr[i] = new int*[dim2];
for (i = 0; i < dim1; i++)
{
<div class='quotetop'>Цитата(Aku_Aku * 29.7.2009, 10:59) [snapback]297575[/snapback]</div>Мне всего 5 циклов (итераций) надо, чтобы получить хорошую сферу (см. прогу Генерала). Массив считатеся один раз и навсегда, просто потом его надо сохранить в файле и вдальнейшем уже грузить из файлаЭ-эх. Учить вас еще и учить.
Зачем тебе динамический массив здесь? В цикле?
У тебе что, количество вершин так резко меняется???
Ты что не понимаеш, что каждый раз создавая/удаляя массив занимаешся выделением/удалением памяти под него. Да еще в цикле.
Зачем тебе вообще динамический массив? Чем тебе не понравилась локальная переменная, которая стековая?
[/b]
Если во всех книгах рекомендуют определять многомерный динамический массив через указатели на одномерный и с помощью операторов new и delete, значит это неспроста, значит это не просто так
<div class='quotetop'>Цитата</div>А вот если б ты не выдумывал велосипед, а прочитал бы ман, то знал бы, что у встроенных контейнеров СТЛ уже реализована функция записи в файл . Равно как и чтения.Массив считатеся один раз и навсегда, просто потом его надо сохранить в файле и вдальнейшем уже грузить из файла[/b]
А тебе еще со своим динамическим для этого еще с циклами возится.
<div class='quotetop'>Цитата</div>То такие специалисты книги пишут.Если во всех книгах рекомендуют определять многомерный динамический массив через указатели на одномерный и с помощью операторов new и delete, значит это неспроста, значит это не просто так[/b]
Кстати. А какие это "все книги"? Какого они года выпуска?
<div class='quotetop'>Цитата(Finansist's sworn brother * 29.7.2009, 13:30) [snapback]297582[/snapback]</div>Замечаю, что в программировании большинство новичков не желает следовать совету более опытных коллег. Если они задались целью пробить стену молотком им бесполезно указывать, что выйти через дверь проще и быстрее. В лучшем случае, они возьмут молоток побольше. Возможно, в этом есть какой-то высший смысл...Кто ищет, то найдет, кто хочет, тот добьётся.
Код://создание и удаления двухмерного динамического массива ... //создание и удаления трехмерного динамического массива ...
[/b]
Но тогда зачем задавать вопросы на форуме?
Sorry pal
Но если ты воспринимаеш помощь как что-то другое, отличное от способности поделится толковой информацией по теме, подсказать.
Например если ждешь что тебя кто-то за ручку будет переводить через трудные места. Читать вместо тебя мануалы...
Знаеш. Мое желание помагать ты довольно таки серьозно подкосил. Такими претензиями. Может так случится? что в следующий раз, мне уже не захочется так морочится, подсказывать. Ограничусь емким и ясным -- RTFM.
Дык, ФСБ, и хотел бы помочь - но толком не могу, мои познания в С++ ниже, чем нужно.
Могу только, несколько умозрительно, возможно, обратить твоё внимание на С#: мои собственные заморочки там разрешились с чарующей простотой (Петеру спасибо ).
В книжке попадались упоминания, что можно там и создавать
многомерные массивы переменной размерности. Посмотри -
может, эта штука и тебе поможет?
<div class='quotetop'>Цитата(Finansist's sworn brother * 29.7.2009, 17:25) [snapback]297609[/snapback]</div>Значит, на первый пост ты просто не обратил внимание? Тогда понятно.Monster
Да, чувак, ты сильно помог. Твой пост прямо кишит помощью.
Ой, точнее, два твоих поста.
[/b]
Действительно, Aku_Aku, желание помогать подкосилось.