Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.59
JollyRoger
2 / 2 / 0
Регистрация: 31.12.2012
Сообщений: 31
#1

Массив произвольной размерности и работа с ним - C++

20.03.2013, 11:05. Просмотров 2395. Ответов 35
Метки нет (Все метки)

Доброго времени суток. Появилась интересная задача: создать функцию для создания массива, размерность которого укажут в ходе программы(то есть не a[n] и n укажут-а а[q1][q2][q3][q4]..., и q1,q2... укажут, как и количество этих q, уже в процессе выполнения программы) и поменять местами первый с последним, второй с предпоследним и так далее элементы. Вопрос в следующем: как, собственно, создать такой массив, как сделать необходимое (изначально неизвестное) количество вложенных циклов для затрагивания всех элементов массива? Если вариантов несколько-то лучше самый простой и быстродейственный

З.Ы. Для количества вложенных циков-на ум приходит эллипсис, хотя с ним и гемор. А вот идей по созданию массива полный 0.
З.З.Ы. Создать строку вместо массива не предлагать-индусский код не для меня.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 11:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив произвольной размерности и работа с ним (C++):

Матрица произвольной размерности - C++
Разработать класс, объект которого реализует «пользовательский» тип данных. Обеспечить его произвольную размерность за счет использования в...

Матрица произвольной размерности - C++
Матрица произвольной размерности, представленная размерностями и линейным динамическим массивом коэффициентов матрицы, в котором она...

Даны две матрицы произвольной размерности - C++
При выполнении этого задания необходимо написать две функции. Одна из этих функций должна получать и обрабатывать матрицу целиком. Другая...

Характеристический многочлен матрицы произвольной размерности - C++
не могу придумать как реализовать характеристический многолчен: дана матрица :\begin{pmatrix}3 &1 \\ 2 &4 \end{pmatrix} нужно найти ее...

Разработать класс Vector – геометрический вектор произвольной размерности - C++
Разработать класс Vector – геометрический вектор произвольной размерности (размерность задается в конструкторе вектора). Реализовать метод...

9. Матрица произвольной размерности, представленная раз* мерностями и динамическим массивом указателей на динамиче* ские массивы - строки матрицы. - C++
Всем привет!помогите пожалуйста с задачей. Матрица произвольной размерности, представленная раз* мерностями и динамическим массивом...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.03.2013, 11:09 #2
Задача не интересная. Это даже не задача. Самое обычное выделение динамической памяти. new. Кол-во циклов у тебя уже известно, когда пользователь задаст размер массива.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
20.03.2013, 11:12 #3
Создать одномерный массив, размерности N = q1*q2*...*qn. А для доступа по n-мерным координатам сделать обертку, принимающую Point<N>.
JollyRoger
2 / 2 / 0
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 11:29  [ТС] #4
Vourhey, не смешно. Как выделять память через new я знаю, вопрос в том как создать массив произвольной РАЗМЕРНОСТИ а не РАЗМЕРА. То есть могут задать a[q1] а могут a[q1][q2][q3][q4][q5]...[q100500].
Tulosba, просил же не предлагать строку. Это не вариант.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
20.03.2013, 11:41 #5
Цитата Сообщение от JollyRoger Посмотреть сообщение
просил же не предлагать строку
У Вас, видимо, какое-то странное понятие "строки".
JollyRoger
2 / 2 / 0
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 11:46  [ТС] #6
Под строкой я имел в виду одномерный массив.
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
20.03.2013, 12:40 #7
насколько я понимаю, произвольной размерности, нельзя создать
CollSpack
7 / 7 / 0
Регистрация: 21.01.2013
Сообщений: 55
20.03.2013, 12:50 #8
Вам лучше ознакомиться с STL - Vector.
И не придется создавать велосипед.
JollyRoger
2 / 2 / 0
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 12:54  [ТС] #9
Да я знаком. Вектор отличается от динамического массива тем, что можно количество элементов менять после того, как он создан, и тем, что для обмена элементов можно менять ссылки на них. Это не устраняет ни одной из 2х моих задач(создание многомерного массива и операции над ним).
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
20.03.2013, 13:01 #10
Кажется я понял, что нужно. По-моему тут рекурсия будет хорошим вариантом с точки зрения простоты реализации.
JollyRoger
2 / 2 / 0
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 13:23  [ТС] #11
Функция-рекурсия и для создания массива(используя то что ссылка на w[0]=*w) и для операций с ним, которая вызывает себя в цикле, но каждый раз уменьшая размерность на 1, и начинающая реальные операции только когда доходит до размерности в 1, то есть до строки...
Непросто, но да ладно. Есть только одна загвоздка в таком случае: w[0][0][0]=***w. И сколько этих звёздочек будет в массиве, знать заранее нельзя(размерность же). Как в таком случае передать ссылку на массив какой-то функции(в моём случае, функции перестановки)?

CollSpack, я и не хочу создавать велосипед, поэтому и написал сюда
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
20.03.2013, 13:27 #12
Цитата Сообщение от JollyRoger Посмотреть сообщение
Есть только одна загвоздка в таком случае: w[0][0][0]=***w. И сколько этих звёздочек будет в массиве, знать заранее нельзя. Как в таком случае передать ссылку на массив функции?
Ну можно передавать *ptr, по сути без разницы. Разница будет только на последнем этапе, когда нужно будет выделять память непосредственно под тип данных, но это тоже решаемо.
P.S. ты путаешь указатели и ссылки.
JollyRoger
2 / 2 / 0
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 13:39  [ТС] #13
Да я их вообще не различаю(указатели и ссылки) :о Разве это не одно и то же?
всмысле *ptr? Я знаю только один метод правильно послать массив n-той размерности в функцию: послать указатель n-той степени(то есть (n)w, вместо (n)-нужное количество звёздочек)+размерность отдельно посылать. Есть альтернатива части с n-тым количеством звёздочек?
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
20.03.2013, 13:51 #14
Ссылка должна быть прикреплена к конкретному объекту, а указатель может быть сам по себе.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
20.03.2013, 13:52 #15
Цитата Сообщение от JollyRoger Посмотреть сообщение
Разве это не одно и то же?
Нет, скажем так: ссылки - это удобные указатели (с некоторыми ограничениями)


Цитата Сообщение от JollyRoger Посмотреть сообщение
Я знаю только один метод правильно послать массив n-той размерности в функцию: послать указатель n-той степени(то есть (n)w, вместо (n)-нужное количество звёздочек)+размерность отдельно посылать. Есть альтернатива части с n-тым количеством звёздочек?
На самом деле пока память выделяется под указатели совсем не важно сколько звездочек. Т.е. в рекурсии в каждом вызове можно использовать указатель с 2 звездочками, этого будет достаточно.
Другое дело что потом работать с этим N-мерным массивом хз как, если только опять через рекурсию, и то там костыли городить придеться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 13:52
Привет! Вот еще темы с ответами:

Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля. - C++
Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля.

Из двух целочисленных массивов различной размерности сформировать общий массив. Упорядочить полученный массив - C++
Кто может сделайте пожалуйста. Из двух целочисленных массивов различной размерности сформировать общий массив. Упорядочить полученный...

Массив размерности n+m - C++
Даны два упорядоченных числовых массива размерности n и m. Получить из них новый упорядоченный массив размерности n+m, не используя...

Стек и работа с ним - C++
Добрый вечер! Мне дали задания: 1. Написать функцию для удаления всех элементов с четными номерами из односвязного списка 2....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.03.2013, 13:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru