2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
|
|
1 | |
Массив произвольной размерности и работа с ним20.03.2013, 11:05. Показов 4448. Ответов 35
Метки нет Все метки)
(
Доброго времени суток. Появилась интересная задача: создать функцию для создания массива, размерность которого укажут в ходе программы(то есть не a[n] и n укажут-а а[q1][q2][q3][q4]..., и q1,q2... укажут, как и количество этих q, уже в процессе выполнения программы) и поменять местами первый с последним, второй с предпоследним и так далее элементы. Вопрос в следующем: как, собственно, создать такой массив, как сделать необходимое (изначально неизвестное) количество вложенных циклов для затрагивания всех элементов массива? Если вариантов несколько-то лучше самый простой и быстродейственный
![]() З.Ы. Для количества вложенных циков-на ум приходит эллипсис, хотя с ним и гемор. А вот идей по созданию массива полный 0. З.З.Ы. Создать строку вместо массива не предлагать-индусский код не для меня.
0
|
|
20.03.2013, 11:05 | |
Ответы с готовыми решениями:
35
работа с матрицами произвольной размерности |
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
|
|
20.03.2013, 11:29 [ТС] | 4 |
Vourhey, не смешно. Как выделять память через new я знаю, вопрос в том как создать массив произвольной РАЗМЕРНОСТИ а не РАЗМЕРА. То есть могут задать a[q1] а могут a[q1][q2][q3][q4][q5]...[q100500].
Tulosba, просил же не предлагать строку. Это не вариант.
0
|
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
|
|
20.03.2013, 11:46 [ТС] | 6 |
Под строкой я имел в виду одномерный массив.
0
|
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
|
|
20.03.2013, 12:40 | 7 |
насколько я понимаю, произвольной размерности, нельзя создать
0
|
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 55
|
|
20.03.2013, 12:50 | 8 |
Вам лучше ознакомиться с STL - Vector.
И не придется создавать велосипед.
0
|
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
|
|
20.03.2013, 12:54 [ТС] | 9 |
Да я знаком. Вектор отличается от динамического массива тем, что можно количество элементов менять после того, как он создан, и тем, что для обмена элементов можно менять ссылки на них. Это не устраняет ни одной из 2х моих задач(создание многомерного массива и операции над ним).
0
|
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
|
|
20.03.2013, 13:23 [ТС] | 11 |
Функция-рекурсия и для создания массива(используя то что ссылка на w[0]=*w) и для операций с ним, которая вызывает себя в цикле, но каждый раз уменьшая размерность на 1, и начинающая реальные операции только когда доходит до размерности в 1, то есть до строки...
Непросто, но да ладно. Есть только одна загвоздка в таком случае: w[0][0][0]=***w. И сколько этих звёздочек будет в массиве, знать заранее нельзя(размерность же). Как в таком случае передать ссылку на массив какой-то функции(в моём случае, функции перестановки)? CollSpack, я и не хочу создавать велосипед, поэтому и написал сюда ![]()
0
|
20.03.2013, 13:27 | 12 |
Ну можно передавать *ptr, по сути без разницы. Разница будет только на последнем этапе, когда нужно будет выделять память непосредственно под тип данных, но это тоже решаемо.
P.S. ты путаешь указатели и ссылки.
0
|
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
|
|
20.03.2013, 13:39 [ТС] | 13 |
Да я их вообще не различаю(указатели и ссылки) :о Разве это не одно и то же?
всмысле *ptr? Я знаю только один метод правильно послать массив n-той размерности в функцию: послать указатель n-той степени(то есть (n)w, вместо (n)-нужное количество звёздочек)+размерность отдельно посылать. Есть альтернатива части с n-тым количеством звёздочек?
0
|
328 / 327 / 92
Регистрация: 16.12.2012
Сообщений: 544
|
|
20.03.2013, 13:51 | 14 |
Ссылка должна быть прикреплена к конкретному объекту, а указатель может быть сам по себе.
0
|
20.03.2013, 13:52 | 15 |
Нет, скажем так: ссылки - это удобные указатели (с некоторыми ограничениями)
На самом деле пока память выделяется под указатели совсем не важно сколько звездочек. Т.е. в рекурсии в каждом вызове можно использовать указатель с 2 звездочками, этого будет достаточно. Другое дело что потом работать с этим N-мерным массивом хз как, если только опять через рекурсию, и то там костыли городить придеться.
0
|
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
|
||||||
20.03.2013, 14:26 [ТС] | 16 | |||||
Окей-с, попробуем...
0
|
Tulosba
|
20.03.2013, 14:40
#18
|
0
|
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
|
|
20.03.2013, 14:48 [ТС] | 19 |
Это указатель на указатель на чар. Как я понял, Kastaneda имел в виду что у нас есть (n)w, где (n)-нужное количество звёздочек, и это указатель. Как *w его передать нельзя, но если сделать указатель на него-выйдет **r, и его уже можно передавать. Хотя я считаю, что если r-указатель на (n)w, то это будет (n+1)r, а не (2)r.
хз вообще
0
|
Почетный модератор
7390 / 2636 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
20.03.2013, 14:50 | 20 |
0
|
20.03.2013, 14:50 | |
Помогаю со студенческими работами здесь
20
Работа с матрицами произвольной размерности
Дан двумерный массив произвольной размерности Как в классе реализовать массив произвольной размерности? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |