![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Создаётся массив vector<vector<vector<... vector<size_t> ... > > >, мера которого устанавливается во время выполнения программы.
Будут создаваться векторы из количества элементов, соответсвующих мере, по которым надо обращаться к этому многомерному массиву. Как это реализовать? Пока в голову приходит только написание функции, делающей из массива число. |
|||
|
||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Сделать это предложенным вами способом невозможно.
Для создания полноценного многомерного массива во время выполнения надо писать собственный класс. Хранить данные можно в простом массиве или valarray<>, а обращаться можно с помощью срезов. |
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Возможно, с учётом того, что известны максимальные возможные значения. Не понял, что значит хранить данные можно в простом массиве. |
|||
|
||||
| sdukshis |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Вот маленький пример как можно представить двухмерный массив с помощью одномерного
Это сообщение отредактировал(а) sdukshis - 29.10.2009, 12:30 |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Честно говоря, я лично не представляю задачи, в которой не известно заранее количество размерностей массива.
Может быть только что-то на уровне разработки компилятора или совсем уже навороченный рассчет неких физических явлений. Мне кажется всегда можно сделать так, что количество размерностей известно заранее - на этапек компиляции программы. ИМХО. |
|||
|
||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Например идет разработка библиотеки для работы с тензорами. При этом программист конечно может зашить размерности всех тензоров на этапе компиляции, но это означает, что он по ходу программы должен помнить все размерности и не сможет для конкретной переменной этой размерности изменить. Конечно можно обойтись вычислениями на этапе компиляции, но при динамической определении с такими классами гораздо проще общаться. Можно моделировать синтаксис и поведения таких систем как matlab, octave, scipy |
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Чёто сразу не сообразил про отображения, наверно они подойдут.
Это задача динамического программирования. Хочу сделать, чтобы при повторном обращении к посчитанным ячейкам результат не пересчитывался, а брался готовый. Но если проверить вычислена ли ячейка, и если нет, то добавить со значением функции, в этом случае обход элементов будет производиться два раза, но мне кажется что здесь можно обойтись одним, как это реализовать? (вычислена - значит в отображении присутствует элемент с заданным ключём). Это сообщение отредактировал(а) User008 - 29.10.2009, 17:53 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Я же не сказал, что задач таких не существует. Я сказал, что я их не представляю в реальной жизни. А я далеко не все могу представить. Теоритически - конечно интересно иметь библиотеку работы с тензорами. Я говорю про практику. Ну там физика - сложные рассчеты. 4-хмерные массивы - согласен - создается программа рассчета каких-нибудь там Демонов Максвелла (образно). Но ведь на этапе проектирования такой программы уже ясно, сколько размерностей потребуется. А вот представить задачу из жизни, где в рамках одной программы возможно задание разной размерности (кроме теории и каких-то ну очень навороченных библиотек) - лично я не представляю. Но это на совести моей малообразованности. Ну а уж коль такое вдруг понадобилось - значит оставить в покое STL (ну у всяких вещей есть разумный предел) - и делать вручную под себя. Вообще STL - эта вещь изначально построенная на то, чтобы собираться в момент компиляции. Поэтому динамическая вложенность тут если и возможна - то не уверен, что проста и очевидна. (лично я не знаю как это сделать, да и не думаю, что когда-нибудь мне это понадобится). Лично я бы делал классами с использованием вектора, пожалуй. И синтаксис попроще и пользоваться поудобнее. ИМХО. |
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Почитал про хэш-таблицы, кажется это имеет общее с тем, о чём я писал в первом посте.
Для хэш-функции наверно подойдёт boost::hash_combine. Но надо бы ещё выбрать класс хэш-таблицы. У буста я такого не вижу. hash_map в visual c++ 2008 есть, но в Qt его нет. Сам я никогда с ними не работал, хотелось бы совета насчёт готовой хэш-таблицы. Это сообщение отредактировал(а) User008 - 30.10.2009, 02:39 |
|||
|
||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
boost::unordered_* |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |