![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| 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. |