![]() |
|
Модераторы: bsa |
![]()
|
|
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Я этого просто ждал. GoldFinch, я же сразу написал, что отыгрываю без оптимизации! Мой пример не практичен - так как ничего особого не делает, я его сделал для теста. Возьмите другой пример - на диске файл, сформированный кем-то извне, который содержит перечень координат. Надо взять координату и инкрементировать элемент матрицы. И все сразу станет ясно. Вы уже цепляетесь просто за свою идею вместо того, чтобы просто согласиться, что вы не правы. Второй вариант - формируем координаты случайным образом, например, чтобы проверить генератор случайных чисел или имитируем дождь. Делаем пару миллиардов капель и раскидываем случайным образом по матрице. Какой вариант покажет более высокую скорость? Это же просто очевидно, в варианте динамического формирования присутствует операция умножения, операция извлечения размерности из переменной и только потом адресация к нужному адресу. И хорошо, если оптимизатору удется размерность в регистре держать. А если нет? Второй момент: при рабочих кодах, если идет множественное обращение к элементу в разных местах программы - у вас будет тратиться память. На то же умножение и извлечение размерности из переменной. И в некоторых случаях динамический вариант рассчета индекса потратит больше памяти, чем через указатели. Я ведь не говорю, что ваш вариант бред и неправильный! Я говорю, что все зависит от задачи, но ваш вариант - это не динамический многомерный массив, а его эмуляция при помощи одномерного. И такая эмуляция во многих случаях оказывается удобнее. Нам дан инструмент - С++. Наша задача использовать его максимально удобно и эффективно. Добавлено через 2 минуты и 5 секунд
А это уже попахивает некомпетентностью. Чем же дефайн облегчит жизнь? |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
||||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
матрицу (т. е. в случаях когда нужна двухмерность) невозможно обойти линейным итератором.
о том и речь, что при правильных руках для повседневных задач оба решения равноценны и выбор зависит от других факторов, о которых (применительно к текущей задаче) мы практически ничего не знаем. |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
задача i=0; M[x,y]= i++; эквивалентная M[x,y]=x+cx*y решается именно линейным итератором задачи обнуления матрицы, формирования единичной матрицы, и т.п. решаются линейными итераторами суммирование двух матриц так же производится линейным обходом всех элементов матриц если матрица - это картинка, то проход по ней окном (например для наложения фильтра) так же решается линейным обходом конечно тут можно сказать, что двухмерность и не нужна, но все же это задачи связанные с двумерными матрицами |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Я думал облегчит в плане скорости. Вообще-то многие гуру уберегают от использования define, особенно с параметрами. Например приведенный define (#define _M(x,y) M[x+cx*y]) я уверен не вызвал никаких опасений, а ведь он опасно неправильный. Интересно, что вы отстаиваете? То, что с матрицами производятся только линейные операции? Для линейных итераций матрица как раз не особо нужна. И никто не спорит, что ваш подход имеет право на жизнь. В общем то случае жизнь сложна и многогранна. Метод создания динамических многомерных массивов был разработан давно, поддерживается языком, разработчиками. Если честно, я впервые сталкиваюсь с таким упрямым отстаиванием одного метода... Все-таки как быть со случайным доступом? |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
да для этих задач двухмерность не нужна. (поэтому я и уточнял в скобках, чтоб избежать лишних споров) Добавлено @ 20:19
не только опасения, но и в таком виде абсолютно не применим для не тестового/учебного (и другого в этом роде) задания , хотя бы потому что не масштабируем (не говоря уж о магической переменной). Это сообщение отредактировал(а) mes - 3.3.2009, 21:45 |
||||
|
|||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
mes, а где она нужна, двумерность?
или выровнять длину строки до 2^n и использовать умножение сдвигом
да, но его следует использовать совсем для других целей |
||||
|
|||||
| Anikmar |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Он просто неправильный. Такой define как раз смело можно называть бредом. Цели мы вообще пока не обсуждали. У нас цель была только одна: показать как его (динамический многомерный массив) создавать. Если согласно ваших же слов существуют некие цели, для которых следует использовать многомерный массив, то тогда можно узнать, что вы оспариваете? Краткая история данной темы: Автор попросил показать пример создания динамического многомерного массива, так как одномерный у него получился, а многомерный нет. Автор получил несколько ответов, в том числе мой, который просто иллюстрирует книжный пример от разработчиков С++ как это делать, правильность которого больше ни у кого не вызвала сомнений. Мой ответ вы обозвали полным бредом и стали утверждать, что двумерный массив никому не нужен, а работать с ним следует только как с одномерным методом динамического вычисления индекса. Причем в одном из последних постов вы меня сразили насмерть - вы предложилди для увеличения скорости создать отдельный индексный массив:
что по сути просто представляет собой усложненный стандартный метод, который я представил. Далее вы просто стали придираться к мелочам:
хотя я данным пример хотел лишь показать, что конструкция с умножением и дополнительной переменной априоре медленнее, чем операция сложения с базой Затем предоставили неправильную #define: который лишь показывает, что вы не знаете основные правила написания таких команд Заодно предлагаете любые методы, усложняющие код, чтобы только отстоять свое:
Я просто не понимаю уже предмета спора, если вы будете использовать свой метод - используйте, ведь никто в мире не сможет вам это запретить. Но с таким длительным спором, я уже не знаю в чем я вас должен убедить, если на очевидные вещи вы говорите нет и все тут... Станиславский однако... |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Как я понял GoldFinch пытается нам открыть глаза на возможность использования линейного массива, как матрицы и того что с этим связано. И я ценю это рвение Вот только жаль, что Вы, GoldFinch, не замечаете, что никто не выступает против. Протест высказан по поводу слова "бред" сказанного по отношению к использованию массива массивов как матрицы. И самое интересное, что в одном из высказываний, Вы все таки сами предложили использовать такой подход для некоторых задач, в числе которых вполне может быть и текущая обсуждаемая. Поэтому, имхо, спор исчерпал себя. |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Горячие финские парни...
Я уже могу закрыть тему? |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Если ты пользуешься Билдером, то там в хелпе есть пример кода на С++ (без STL, только new и delete) как динамически создать двухмерный массив и как правильно его удалить. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Gunslinger |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
искал по dinamic, massiv, pointer - не нашел. возникла ошибка EInvalidPointer with message 'Invalid pointer operation'. Ошибка возникает, когда нажимаю кнопку с инициализацией массива, а затем закрытия программы. Может с массивом не так что сделал? Кратко о проге: нажав на кнопку, создается массив; дескриптор записал в обработчик закрытия окна. Но если кнопку не нажимать, а сразу закрыть окно - возникнет ошибка. Поэтому сначала нужно определить, была ли нажата кнопка. Все эти действия я обернул в класс:
код проги:
Это сообщение отредактировал(а) Gunslinger - 4.3.2009, 10:59 |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |