![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Как лучше организовать список на С++ чтобы было удобно пользоваться, но сделать это вне ООП. Я как не начинаю думать тут же пишу класс, а мне надо без них.
-------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 9 Всего: 71 |
Artiom а структуры подойдут?
|
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
а через struct пробывал
|
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
Какой именно список?
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Так ведь методы класса отличаются от обычных функций только наличием скрытого параметра this. Что тебе мешает сделать структуру и набор функций, аналогичных тем, которые могли бы быть в классе, и передавать этим функциям указатель (или ссылку) на структуру
-------------------- Да. Именно так. |
|||
|
||||
| Artiom |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Двунаправленный.
Не знаю. Наверное какой-то внутренний барьер мешал Просто всё это кажется жутко неудобным, а то что приходится переделывать программу с целью сделать её более примитивной просто бесит. -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
||||
|
|||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
А если не секрет, зачем, не ужели задача НАСТОЛЬКО требовательна к ресурсам?
-------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
А не проще просто сделать структуру ввиде данных, и указателей на начало и конец списка.
Ну а потом снабдить его методами обработки данных: вставки, удаления, и т.п. ? -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Задача - реализация различных численных методов с участием разреженных матриц очень больших размеров. Чтобы не хранить нулевые элементы использую список. Возможно отказ от классов и даст какой-то выигрыш в скорости.... По крайней мере такова задумка моего научного руководителя. -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: нет Всего: 5 |
но все же руками будешь писать... неужели stl, boost никак не впихнуть - всеж уже написано за нас...
а то есть ведь и асм =)) -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
redrick
A что такое STL как не классы? -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
Нужен связный двунаправленный список?
|
|||
|
||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: нет Всего: 5 |
не спорю - просто лишний раз посомневался стоит ли оно того... почему тогда именно С++ ? -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
если не использовать виртуальных функций, то код
тупо заменяется на
при компиляции (вообще-то эти слова не помешало бы проверить дизассемблером, но вроде бы так) так что никакого выигрыша от отказа от классов нету (я не имею в виду, что он маленький, я имею в виду, что его нету совсем) ма-а-а-аленький выигрыш может получиться, если функция была виртуальная, тогда он еще полезет в таблицу за ее адресом, но если функция - не простое присваивание значения одной переменной, то выигрыш будет мизерным... попробуй показать дизассемблированные коды вызова методов в разных ситуациях своему научному руководителю, возможно, это несколько прояснит ситуацию и позволит более точно оченить выигрыш от отказа от использования классов... -------------------- qqq |
||||
|
|||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Именно! maxim1000 Спасибо, учту -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Написал. Нифига быстрее не стало.
-------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| Chaos A.D. |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Вот, держи. Это должно помочь тебе. Почти полноценный класс. Единственное отличие от класса - функция at - что-то вроде operator[], только в глобальной области действия.
Наверное в коде полно ошибок - я торопился, и не тестировал почти. Разве что вот такой пример скомпилил :
Надеюсь, тебе это подойдет для твоих целей. Можешь еще добавить всяких ф-кций для
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
||||||
|
|||||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
А может не стоит мучаться, а использовать std::list |
|||
|
||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Дык ему же вроде без классов (: Если препод ламер (частенько такие встречаются) - можешь приколоться - сделать #define struct class, где-нибудь в дебрях кода. Это сообщение отредактировал(а) Chaos A.D. - 11.3.2005, 00:04 --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| Artiom |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Chaos A.D. спасибо за код, но я уже
Но в любом случае пригодится.
Ну это уж слишлом -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
||||
|
|||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Ну если struct можно было использовать, то это вообще окей...
Правда, в C++ они НИЧЕМ не отличаются от классов. --------------------
|
|||
|
||||
| Fantasist |
|
||||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Совершенно верно. Классы в С++ проектировались так, чтобы не нести никаких накладных расходов. Так что в данном случае отказ от классов есть принесет только потерю структурированности и читабильности кода (не обязательно, но очень вероятно).
Такие функции обычно делаются inline и опять не будет никаких потерь. Добавлено @ 03:37
Ага и что это даст? Ведь
за исключением того, что в структуре все поля по умолчанию public тогда как в классах private. -------------------- Волны гасят ветер... |
||||||||
|
|||||||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
ну насчет ламерства препода я бы не был так уверен как я уже говорил, отказ от классов на уровне языка практически ничего не дает НО можно отказаться от классов на более высоком уровне ООП имеет, по сути, один эффект: позволяет не думать обо всем сразу например, реализовал вектор и забыл - просто пользуешься этот подход позволяет решать задачи значительно большей сложности, чем без его использования однако, представим себе, что нам надо заполнить вектор нулями как можно быстрее какой самый быстрый способ? memset, если я не ошибаюсь но в случае класса не пойдет: мы же не знаем как он там реализован, вдруг он в виде списка? поэтому если уж отказываться от классов, то стоит подумать не о том, как хранить элемент матрицы, а о том, как хранить матрицу... например, один из возможных способов хранения: матрица - массив строк (просто указателей) строка - массив элементов типа (i,ai) - пара из индекса элемента и его значения в конце строки какой-нибудь условный признак, типа i=-1 (заметим, что уже после этого ничего не мешает нам представить строку в виде класса) достоинства такого метода: 1. память - используется большая экономия памяти: если у нас всего n элементов в строке, понадобится 10*n=8*n+2*n (это если sizeof(double)=8, а ширина матрицы до 65536), в случае списка нужно хранить: элемент, его координаты, указатель на следующий - значительно больше 2. скорость действия на вектор: просто идем по строке и делаем простую операцию y+=ai*x[i] недостатки: далеко не все операции удобно выполнять в таком виде (все то же транспонирование, например) однако для итеративных методов обращения матрицы, насколько я припоминаю, основной операцией является как раз действие на элемент... Добавлено @ 10:38
здесь я говорил о вирутальных функциях честно говоря, сомневаюсь, чтобы они делались inline (ведь адрес функции будет известен только во время исполнения)... -------------------- qqq |
||||
|
|||||
| Fantasist |
|
||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Обычно, функции которые только изменяют значение одной переменной невиртуальные. Виртуальными делают те, которые несут какую-то логику, чаще всего в них выполняются более развернутые операции.
Это если используешь указатели на класс. Никто не мешает тебе создать переменную этого класса, тогда и виртуальные функции будут вызываться статически и могут быть встроенны. -------------------- Волны гасят ветер... |
||||
|
|||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
А может динамическим массивом заменить? Из структур, например. И еще, он еще нужен?
|
|||
|
||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Я уже решил, что буду кроме списка реализовывать метод на основе бинарного дерева. Кроме того можно применять хеширование, но оно применяется при высокой степени заполнения матрицы. А со списком я уже разобрался и всё написал.
-------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
maxim1000
Вектор - это вектор, а список - это список. Не надо смешивать до кучи В std::vector заведомо истино условие: &v[i] == &v[0] + i А это говорит, что std::vector может быть задействован во всех случаях, когда используется динамический массив. Например, вполне допустимо:
Это сообщение отредактировал(а) bel_nikita - 12.3.2005, 03:22 |
||||
|
|||||
| Да гость я... |
|
|||
|
Unregistered |
Скажите Artiom, 1) Сосредотачиваются ли ненулевые элементы матрицы у главной дипгонали? 2) Симметрична ли матрица? 3) Что за численные методы вы используете, не МКЭ ли случаем? |
|||
|
||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
1) Матрица произвольна. 2) Нет 3)Решение сис-м линейных уравнений - прямые методы. Это сообщение отредактировал(а) Artiom - 12.3.2005, 18:46 -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |