|
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
|
|
Создание n-мерного динамического массива21.11.2017, 21:40. Показов 10019. Ответов 55
Метки нет (Все метки)
Ломаю голову над реализацией функции, которая создаёт n-мерный динамический массив. Возможно ли это вообще?
Для меня проблема в количестве звёздочек, то есть сколько звёздочек у первого указателя, такая и размерность массива, но эти звёзочки просто так не поставишь. Заранее спасибо за Ваши идеи и советы.
0
|
|
| 21.11.2017, 21:40 | |
|
Ответы с готовыми решениями:
55
Создание 3-х мерного динамического массива Инициализация N-мерного динамического массива
|
|
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
|
||||||
| 24.11.2017, 13:12 | ||||||
|
Pechkin80, я так понимаю, пока не закончатся звездочки.
0
|
||||||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
||||||
| 24.11.2017, 13:14 | ||||||
|
QuakerRUS, К этой рекурсии вопросов нет, но она никак не связана с функцией выделения памяти.
0
|
||||||
|
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
|
||||||
| 24.11.2017, 13:17 | ||||||
|
Pechkin80, почему не связана? а как же
0
|
||||||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 24.11.2017, 13:19 | |
|
QuakerRUS, Здесь у N другой смысл. Если в шаблонной рекурсии это размерность, то тут это размер. А размерность задаётся самой рекурсией функции, которая не имеет условия окончания рекурсии.
Получается выделение памяти для массива конечного размера и бесконечной размерности.
0
|
|
|
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
|
|||||||||||
| 24.11.2017, 13:21 | |||||||||||
|
Pechkin80, пока есть звездочки выполняется это
0
|
|||||||||||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 24.11.2017, 13:29 | |
|
QuakerRUS, Звёздочки заканчиваются в шаблонной рекурсии, а тут рекурсия функции.
0
|
|
|
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
|
|||||||||||
| 24.11.2017, 13:31 | |||||||||||
|
Pechkin80, каждый рекурсивный вызов передает на одну звездочку меньше.
Вот тут на одну звездочку больше (смотрим первый аргумент)
0
|
|||||||||||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 24.11.2017, 13:34 | |
|
QuakerRUS, массив всегда неявно преобразовывается в указатель на тип при передачи в качестве аргумента, а для тела функции количество звёздочек неизвестно. Оно его не в состоянии определить.
0
|
|
|
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
|
||||||||||||||||
| 24.11.2017, 13:53 | ||||||||||||||||
|
Pechkin80, давай на примере.
Далее создаются следующие экземпляры шаблонов
Каждый рекурсивный вызов имеет на одну звездочку меньше. Когда звездочки кончаются, вызывается следующий экземпляр шаблона, который заканчивает рекурсию.
0
|
||||||||||||||||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
|
||||||||
| 24.11.2017, 13:58 | ||||||||
|
И, между прочим, обращение к вложенному массиву выглядит не лучше
. Кстати, еще одно преимущество линейного способа - заполнение какими-то числами (bzero / memset), копирование (memcpy) и т.п. Ну и накладные расходы на создание-удаление вложенного массива значительно больше: для P-мерного массива по N элементов это S = (1-NP)/(1-N) вызовов new / delete. Для примера Байта, N=2, P=18, тогда S = 262143 вызова. По 8 байт на каждый указатель это 2 мегабайта памяти только накладных расходов, не говоря уж о данных, которых будет sizeof(data)*NP, то есть 262144*sizeof(data). Так что даже для double (8 байт) это те же 2 мегабайта, столько же сколько занимает служебная информация об указателях на указатели.
1
|
||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 24.11.2017, 14:00 | |
|
Правда n-мерность динамически задавать для такого массива не получится. Правда тогда и обращение к элементу массива придётся переделывать, так что может менять мерность и вовсе бессмысленно
0
|
|
|
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
|
||
| 24.11.2017, 14:48 | ||
|
Pechkin80, и вообще это не совсем рекурсия. Каждая функция имеет свой экземпляр, так как типы первого аргумента в каждом экземпляре шаблона различаются.
Добавлено через 17 минут
0
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
|
|
| 24.11.2017, 14:50 | |
|
QuakerRUS, можно и в виде рекурсии сделать, тогда передавать размерность явным образом. Это немного уменьшит объем бинарника, возможно повысит читаемость, но кардинально ничего не изменит.
0
|
|
|
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
|
|
| 24.11.2017, 15:02 | |
|
COKPOWEHEU, думаю, что можно, если, например, передавать в нее информацию о вложенности.
0
|
|
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
|
||||||
| 24.11.2017, 15:29 | ||||||
0
|
||||||
|
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
|
|
| 24.11.2017, 15:55 | |
|
COKPOWEHEU, да, я так примерно себе и представлял. Используем указатели void * (и void **) и передаем информацию о вложенности (pwr-1).
0
|
|
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
|
|
| 24.11.2017, 16:07 | |
|
Только это не отменяет двух фактов:
1. массив 18-й степени вложенности это извращение 2. создание такого извращения методом вложенных массивов крайне расточительно Мне даже любопытно узнать для чего такое может пригодиться.
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 24.11.2017, 16:15 | ||
|
Добавлено через 1 минуту Этакое статическое бинарное дерево.
0
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
|
|
| 24.11.2017, 16:36 | |
|
но это ведь не учитывает узлы - только листья. Насколько я знаю, статические бинарные деревья кодируют немного по-другому
(a)(aa)(ab)(aaa)(aab)(aba)(abb)(aaaa)(aa ab)(aaba)(aabb)(abaa)(abab)(abba)(abbb) в виде линейного массива, кекеке. то есть для i-го узла дочерними будут [2i+1] и [2i+2]
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 24.11.2017, 16:42 | ||
|
И да, если "длина массива" не два, то получится не бинарное, а size-нарное дерево. Фиксированной глубины, определяемой размерностью.
0
|
||
| 24.11.2017, 16:42 | |
|
Создание динамического массива Создание динамического массива Создание динамического массива
Создание динамического массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|