+ Ответить в теме
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 20 из 39

Тема: Вопросы кода

  1. #1

    Thumbs up

    По мере разработки игры неизбежно будут возникать вопросы, как написать то или се в коде. Поэтому решил создать соответствующую тему, в которой будем помогать друг другу.

    Вот впервые столкнулся с проблемой в C++ создать многомерный динамический массив. У меня куча книг по C++ , но оказалось, что ни в одной толком ничего не написано и уж тем более ничего не объяснено по этому вопросу. Проблема такая: нужно создать трехмерный динамический массив и в дальнейшем присвоить ему значения. Как это сделать с помощью оператров new ?
    продвинь это сообщение в соцсеть:  

  2. #2
    поройся в в манах по STL (надеюсь знаеш что таеое)

    на пример типа vector

    многомерные строятся на его основе с помощью еще одного типа slice

    о new забудь
    продвинь это сообщение в соцсеть:  
    "Я слышу, и я забываю. Я вижу, и я запоминаю. Я делаю, и я понимаю."
    Конфуций

  3. #3
    <div class='quotetop'>Цитата</div>
    поройся в в манах по STL (надеюсь знаеш что таеое)[/b]
    Не знаю.

    <div class='quotetop'>Цитата</div>
    на пример типа vector
    многомерные строятся на его основе с помощью еще одного типа slice
    [/b]
    Что за типы? Мне динамическую величину создать надо и все. А точнее многомерный массив. И узнать как с ним работать. Как ему присвоить значения и как вдальнейшем с ним оперировать.

    <div class='quotetop'>Цитата</div>
    о new забудь
    [/b]
    В книгах рекомендуется new для создания и delete для удаления. Но там сложности с указателями возникают.
    продвинь это сообщение в соцсеть:  

  4. #4
    Короче хочу создать трехмерный динамический массив типа float или GLfloat array[n][3][3], где n - число треугольников на сфере, 3 - число точек в треугольнике, 3 - число координат точки. Потом этот массив должен принять определенные значения, с помощью которых определяется следующий динамический массив (для следующей итерации), потом старый массив удаляется и создается заново с размерность нового. Старый принимает значения нового, потом новый удаляется. Все это происходит в цикле. Вот так вот.
    продвинь это сообщение в соцсеть:  

  5. #5
    Как я понимаю нужно сделать указатель на указатель на указатель одномерного динамического массива и с ним уже оперировать.
    продвинь это сообщение в соцсеть:  

  6. #6
    В данной ситуации правильнее определить структуру/класс "ТреугольникType", после чего создать одномерный массив этого класса.
    продвинь это сообщение в соцсеть:  
    Нет монстров страшнее людей.

  7. #7
    Злой магрибский колдун CIVFANATICS.RU TEAM Аватар для sweeper


    Регистрация
    01.03.2005
    Сообщений
    2,968
    ...а также ссылки на соседние треугольники, хранение ребер как отдельных объектов, связи между ребрами, образующими общую границу, координаты центра, направления на центры соседних треугольников.

    слайсы? не уверен, что это полезно. В чем принципиальная разница:
    listobject[idx].X или
    listobject.sliceX[idx] ?
    продвинь это сообщение в соцсеть:  
    Вот уже несколько лет все мои посты крутятся вокруг темы реалистичной модели цивилизации.

  8. #8
    Варвар

    Аватар для Peter

    Steam
    Mk Z

    Регистрация
    15.10.2005
    Адрес
    Россия, Самара
    Сообщений
    2,580
    vector<vector<vector<...>>>
    или массив указателей на указатели на массивы
    ps: на c++ не пишу
    продвинь это сообщение в соцсеть:  
    EC2 - разработка игры
    Мастерская Steam - мои моды для Civilization V
    Last Citadel - сайт игроков Warlords III

  9. #9
    просто в 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
    продвинь это сообщение в соцсеть:  
    "Я слышу, и я забываю. Я вижу, и я запоминаю. Я делаю, и я понимаю."
    Конфуций

  10. #10
    Вот.

    http://www.dbebooks.ru/4/jazyki-programmir...istov-na-s.html

    Вообще книжку можно скачать
    продвинь это сообщение в соцсеть:  
    "Я слышу, и я забываю. Я вижу, и я запоминаю. Я делаю, и я понимаю."
    Конфуций

  11. #11
    Кто ищет, то найдет, кто хочет, тот добьётся.

    [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++)
    {
    продвинь это сообщение в соцсеть:  

  12. #12
    <div class='quotetop'>Цитата(Aku_Aku * 29.7.2009, 10:59) [snapback]297575[/snapback]</div>
    Э-эх. Учить вас еще и учить.
    Зачем тебе динамический массив здесь? В цикле?
    У тебе что, количество вершин так резко меняется???
    Ты что не понимаеш, что каждый раз создавая/удаляя массив занимаешся выделением/удалением памяти под него. Да еще в цикле.
    Зачем тебе вообще динамический массив? Чем тебе не понравилась локальная переменная, которая стековая?
    [/b]
    Мне всего 5 циклов (итераций) надо, чтобы получить хорошую сферу (см. прогу Генерала). Массив считатеся один раз и навсегда, просто потом его надо сохранить в файле и вдальнейшем уже грузить из файла

    Если во всех книгах рекомендуют определять многомерный динамический массив через указатели на одномерный и с помощью операторов new и delete, значит это неспроста, значит это не просто так
    продвинь это сообщение в соцсеть:  

  13. #13
    <div class='quotetop'>Цитата</div>
    Массив считатеся один раз и навсегда, просто потом его надо сохранить в файле и вдальнейшем уже грузить из файла[/b]
    А вот если б ты не выдумывал велосипед, а прочитал бы ман, то знал бы, что у встроенных контейнеров СТЛ уже реализована функция записи в файл . Равно как и чтения.

    А тебе еще со своим динамическим для этого еще с циклами возится.

    <div class='quotetop'>Цитата</div>
    Если во всех книгах рекомендуют определять многомерный динамический массив через указатели на одномерный и с помощью операторов new и delete, значит это неспроста, значит это не просто так[/b]
    То такие специалисты книги пишут.
    Кстати. А какие это "все книги"? Какого они года выпуска?
    продвинь это сообщение в соцсеть:  
    "Я слышу, и я забываю. Я вижу, и я запоминаю. Я делаю, и я понимаю."
    Конфуций

  14. #14
    <div class='quotetop'>Цитата(Finansist&#39;s sworn brother * 29.7.2009, 13:30) [snapback]297582[/snapback]</div>
    Кто ищет, то найдет, кто хочет, тот добьётся.
    Код:
    //создание и удаления двухмерного динамического массива
    ...
    //создание и удаления трехмерного динамического массива
    ...

    [/b]
    Замечаю, что в программировании большинство новичков не желает следовать совету более опытных коллег. Если они задались целью пробить стену молотком им бесполезно указывать, что выйти через дверь проще и быстрее. В лучшем случае, они возьмут молоток побольше. Возможно, в этом есть какой-то высший смысл...
    Но тогда зачем задавать вопросы на форуме?
    продвинь это сообщение в соцсеть:  
    Нет монстров страшнее людей.

  15. #15
    Monster
    Да, чувак, ты сильно помог. Твой пост прямо кишит помощью.

    Ой, точнее, два твоих поста.

    Каждый понемногу блеснул своими знаниями на этом помощь закончилась
    продвинь это сообщение в соцсеть:  

  16. #16
    Sorry pal

    Но если ты воспринимаеш помощь как что-то другое, отличное от способности поделится толковой информацией по теме, подсказать.
    Например если ждешь что тебя кто-то за ручку будет переводить через трудные места. Читать вместо тебя мануалы...

    Знаеш. Мое желание помагать ты довольно таки серьозно подкосил. Такими претензиями. Может так случится? что в следующий раз, мне уже не захочется так морочится, подсказывать. Ограничусь емким и ясным -- RTFM.
    продвинь это сообщение в соцсеть:  
    "Я слышу, и я забываю. Я вижу, и я запоминаю. Я делаю, и я понимаю."
    Конфуций

  17. #17
    Король Аватар для Dr Gobbels


    Регистрация
    11.11.2005
    Адрес
    Вологда-Сидней
    Сообщений
    1,048
    Дык, ФСБ, и хотел бы помочь - но толком не могу, мои познания в С++ ниже, чем нужно.

    Могу только, несколько умозрительно, возможно, обратить твоё внимание на С#: мои собственные заморочки там разрешились с чарующей простотой (Петеру спасибо ).

    В книжке попадались упоминания, что можно там и создавать
    многомерные массивы переменной размерности. Посмотри -
    может, эта штука и тебе поможет?
    продвинь это сообщение в соцсеть:  
    Деточка, все мы немножко лошади. Каждый из нас по-своему лошадь.

  18. #18
    <div class='quotetop'>Цитата(Finansist&#39;s sworn brother * 29.7.2009, 17:25) [snapback]297609[/snapback]</div>
    Monster
    Да, чувак, ты сильно помог. Твой пост прямо кишит помощью.

    Ой, точнее, два твоих поста.
    [/b]
    Значит, на первый пост ты просто не обратил внимание? Тогда понятно.
    Действительно, Aku_Aku, желание помогать подкосилось.
    продвинь это сообщение в соцсеть:  
    Нет монстров страшнее людей.

  19. #19
    Всем спасибо, кто искренне хотел помочь Форум программистов помог
    продвинь это сообщение в соцсеть:  

  20. #20


    Какой именно? Если не секрет?
    продвинь это сообщение в соцсеть:  
    "Я слышу, и я забываю. Я вижу, и я запоминаю. Я делаю, и я понимаю."
    Конфуций

+ Ответить в теме
Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru

free counters