|
4 / 4 / 0
Регистрация: 13.07.2021
Сообщений: 59
|
||||||
Массив структур или массив указателей?23.08.2026, 01:55. Показов 2194. Ответов 24
Доброй ночи (у меня, по крайней мере). Вопрос к более опытным программистам скорее по правильности оформления или по архитектуре, не знаю, как будет точнее сформулировать. Небольшой контекст.
Прохожу я курс по программированию компьютерной графики от Gustavo Pezzi, честно спираченный на просторах необъятного. Чувства двоякие: вроде мужик грамотный, круто объясняет, ведёт также курс по компиляторам и ассемблеру для игр на PS1 и Nintendo, даёт математические основы, на курсе только SDL, чистый Си и компилятор. Но код его - это песец! Создание локальных переменных в функции в цикле и во вложенном цикле, каждая из которых используется только один раз, а потом висит на стеке, а нужна для того, чтобы потом это в глобальный массив запушить, написание макроса функции для добавления элемента в динамический массив с маленькой, мать её, буквы (учитывая, что макропроцессор начинает свою работу, когда текст уже разбит на лексеммы, но области видимости ещё не определены)... Даже я это высекаю сразу и понимаю, что так делать не надо. И вот такой фигни - целая куча, всё описывать не буду. Я на ходу переписывал так, как надо, но всё же не уследил, т.к. тема для меня новая, настолько далеко вперёд я не смотрел. Вот теперь пытаюсь разобраться, как это всё грамотно оформить. По задумке автора код выглядит примерно так:
Всё бы было хорошо, но я дошёл до понятия Z-Buffer. Мне надо отсортировать треугольники по оси Z от дальних к ближним. Выводиться точки будут в этом порядке, поэтому ближние объекты будут перекрывать дальние. Вот и встал вопрос, как это сделать правильно. Я не смотрел его реализацию, но что-то мне подсказывает, что будет полный шлак. Это я понял по его подсказкам, когда он давал ДЗ по написанию алгоритма пузырьком. Я написал быструю сортировку с 3-м разбиением по Дейкстре, получил массу эмоций, удовольствие в том числе . Был весёлый случай с обычной быстрой сортировкой, я случайно сгенерил такой массив, который на одном из последних рекурсивных вызовов взял опорный элемент равный последнему, и оба они были максимумами. В итоге валилось всё в segmentation fault. Но это уже другая история.Возвращаюсь к дилемме: с одной стороны в массиве все структуры расположены рядом, но вот свап местами элементов может затянуть прилично ресурсов, ведь никто не гарантирует, что структура не обрастёт дополнительными полями с течением времени. А если сортироать надо будет другой массив, с более тяжёлыми структурами? С другой стороны я знаю, что структуры по значению даже в функции практически никогда не передают, да и один хрен по каждому треугольнику надо будет проходиться в цикле, не всё ли равно, расположены ли структуры в памяти подряд, или в разных местах на куче? Можно создавать динамически структуры, а пушить в массив их адреса, их ведь сильно проще менять местами. Но это надо каждый раз дёргать malloc. Вроде malloc устроен так, что не создаёт оверхед из системных вызовов, он сразу выделяет сколько-то килобайт, а потом раздаёт память по запросу, чтобы не дёргать ОС лишний раз, но вот это "вроде"... Вот я и не могу понять, как тут правильно поступить будет? Подскажите, пожалуйста, более опытные коллеги, какая у вас практика работы в таких ситуациях принята? Хочу научиться так, как надо, ведь хреново -- оно само получится =).
0
|
||||||
| 23.08.2026, 01:55 | |
|
Ответы с готовыми решениями:
24
Создать рекурсивный список динамических структур(или структур указателей) Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур. Массив из указателей на масив из указателей на массив из int) |
|
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,302
|
||||||||||||
| 29.08.2026, 00:23 | ||||||||||||
|
Вот я и почитал..... Добавлено через 14 минут Вот вчера писал. Верхнюю функцию мне подсказал ИИ. Задача - Открыть фолдер и выделить в нём последний по числу и времени подфолдер... На вычитание времяни....
0
|
||||||||||||
|
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,302
|
|
| 29.08.2026, 00:24 | |
|
0
|
|
|
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,302
|
|
| 29.08.2026, 00:32 | |
|
Uko1ove,
Можешь научиться сам себя озадачивать? Какая операционка? Искусственный интеллект может помогать, но нужны твои идеи... Идеи есть?
0
|
|
|
4 / 4 / 0
Регистрация: 13.07.2021
Сообщений: 59
|
||||
| 29.08.2026, 20:15 [ТС] | ||||
|
Меня подкупило то, что в курсе даётся крепкий фундамент + необходимая для этого математика. Хочу понимать, что и зачем я делаю. Пробовал до этого изучать OpenGL и DirectX -- больше похоже на чёрный ящик, когда дёргаешь зафункции API, а внутри происходит какая-то магия. Поэтому, когда наткнулся на курс, я скачал его и начал изучать. Конкретно в этой теме у меня был вопрос, как лучше отсортировать массив треугольников по определённому признаку: использовать массив указателей на структуры треугольников или же массив структур? Появились сомнения по поводу компетентности препода именно в написании кода. Оказалось, что неправ был я. Здесь написали, что конкретного ответа нет, надо тестить и замерять.
0
|
||||
|
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,302
|
|
| 29.08.2026, 23:37 | |
|
Uko1ove,
Вообще ты на бота похож из искуственного интелекта... Многобукоф пишешь.... Не по теме: Всё в дерьмо превращаеться.... Может я старею...
0
|
|
| 29.08.2026, 23:37 | |
|
Массив указателей на массив строк и сортировка массива указателей
Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|