![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ElKa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: нет Всего: 4 |
подскажите пожалуйста как лучше организовать работу с трехмерными массивами
с С++ я только начала работать, еще многого не знаю надо написать программу, обрабатывающую информацию о трехмерных объемах т.е. надо будет в трехмерных, двумерных и одномерных массивах сохранять данные и постоянно с ними оперировать вопросы такие - стоит ли создавать классы для массивов и операторы в них для более удобной обработки, напр. оператор присваивания массива и т.д. и классы Array3, Array2, Array - как декларировать указатель на трехмерный массив и инициализировать сам массив - как удалять многомерные массивы? так же, как и одномерные? delete [] p.. - если трехмерные массивы могут иметь две размерности, а операции с ними одни и те же, как лучше с ними работать? Это сообщение отредактировал(а) ElKa - 12.9.2010, 18:26 |
|||
|
||||
vnf |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 9.2.2008 Репутация: 1 Всего: 1 |
Стоит, очень стоит
Как указатель на объект класса массива CMySuperArray * superarray = new CMySuperArray(5,5,8);
delete superarray
можно трактавать двухмерный массив как частный случай трёхмерного у которого одна из размерностей 1 можно трактавать одномерный массив как частный случай трёхмерного у которого две из размерностей 1 т.е. достаточного одного класса трехмерного массива реализовать такой класс можно попробовать с помощью vector |
||||||||
|
|||||||||
ElKa |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: нет Всего: 4 |
vnf,
спасибо! что-то я не разберусь с этими массивами мне нужен класс для массивов, в котором можно будет размерность устанавливать я написала темплейт и почему-то ошибки посмотрите пожалуйста array.h
array.cxx
вот здесь ошибка Array &Array<T,s1,s2,s3>::operator=(Array &right) говорит expected constructor, destructor, or type conversion before '&' token и еще вопрос как мне декларировать и создавать объекты этого класса в других классах? Array [][][] arr; int arr[2][3][5]; |
||||
|
|||||
vnf |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 9.2.2008 Репутация: 1 Всего: 1 |
должно быть
то что в угловых скобках является неотемлимой часть имени класса соответственно при использовании класса
Вопрос: у вас везде будут испоьлзоваться массивы одинаковой размерности? Если нет, то размерности лs1 s2 s3 лучше не включать в праметры шаблона, а сделать аргументами конструктора
использование
ещё вашему классу нехватает деструктора, в котором нужно будет освобождать память delete [] a_ Это сообщение отредактировал(а) vnf - 20.9.2010, 07:29 |
||||||||||
|
|||||||||||
ElKa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: нет Всего: 4 |
vnf,
спасибо, сейчас все внедрю и посмотрю, что будет |
|||
|
||||
Master01 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 22.8.2007 Репутация: 2 Всего: 2 |
Если это не учебный проект, цель которого именно в том, чтобы "научится создавать собственные трёхмерные массивы", а вам просто нужен в вашей программе трёхмерный массив, то можете воспользоваться готовой реализацией - boost::multi_array
вот пример из хелпа
Добавлено через 5 минут и 19 секунд однако ничего так код для человека, который "с С++ я только начала работать, еще многого не знаю" ![]() |
|||
|
||||
ElKa |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: нет Всего: 4 |
Master01,
спасибо, этот вариант тоже попробую.. а проект не учебный, а очень сурьезный опять ошибка у меня.. посмотрите пожалуйста пока код выглядит так array.h
array.cxx
ошибка здесь Array<T>::Array(int s1, int s2, int s3): a_(new T[s1][s2][s3]), _size1(s1), _size2(s2), _size3(s3){} говорит - `s2' cannot appear in a constant- expression - `s3' cannot appear in a constant- expression |
||||
|
|||||
vnf |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 9.2.2008 Репутация: 1 Всего: 1 |
на
здесь
нужно принициализировать i,j,k, иначе на дебажной будет работать а в релизе ошибки посыплются (int i = 0 и т.д.) в setValue и getValue нужен контроль на выход за границы массива Это сообщение отредактировал(а) vnf - 21.9.2010, 22:09 |
||||||
|
|||||||
RedDigger |
|
||||||
![]() Программист Профиль Группа: Участник Сообщений: 26 Регистрация: 24.9.2010 Где: Москва Репутация: 1 Всего: 1 |
Прошу прощения что влезаю в данный топик но не легче ли будет использовать обычные динамические массивы..
Создать класс для обработки 3х мерных массивов довольно просто. инициализировать подобные элементы также труда составить не должно. Вот рабочая программка только что наваянная: main.cpp
myarray.h
myarray.cpp
Под линуксом работает нормально.. винды нет для проверки но теоретически работать должна и там.. Возможно изза разных компиляторов может чтото ругаться при сборке но все должно правиться без особого труда.. Надеюсь информация поможет. |
||||||
|
|||||||
ValeryLaptev |
|
|||
Препод Профиль Группа: Участник Сообщений: 41 Регистрация: 19.8.2010 Где: Астрахань Репутация: нет Всего: 1 |
Если проект серьезный, как утверждает Elka, то лучше не писать велосипед, а использовать вектор векторов векторов. Из стандартной библиотеки.
|
|||
|
||||
RedDigger |
|
|||
![]() Программист Профиль Группа: Участник Сообщений: 26 Регистрация: 24.9.2010 Где: Москва Репутация: 1 Всего: 1 |
Но при этом не учитывается что вектор занимает в памяти намного больше места нежели обычный массив. А если данных будет очень много??? результатом будет разница в скорости работы.... Холивар поднимать не хочу.. мое дело предложить. |
|||
|
||||
ElKa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: нет Всего: 4 |
RedDigger,
спасибо, попробую и так ValeryLaptev, мне нужны именно массивы, потому что слишком много данных |
|||
|
||||
vnf |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 9.2.2008 Репутация: 1 Всего: 1 |
ElKa
Вопрос: на сколько больше памяти занимает vector по сравнению с массивом? |
|||
|
||||
RedDigger |
|
|||
![]() Программист Профиль Группа: Участник Сообщений: 26 Регистрация: 24.9.2010 Где: Москва Репутация: 1 Всего: 1 |
Вектор - это структурный объект.. У него есть несколько больше возможностей и параметров которые возомжно не нужны в примере.. возможно следует только создать массив, удалить его при выходе и иметь возможность положить туда чтолибо или вытащить с него...
Для огромного объема данных приходится иногда изобретать велосипед.. иногда и 28.4 колесный... лично мне не привыкать ![]() |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |