![]() |
|
Модераторы: bsa |
![]()
|
|
| htzg |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
и
Что быстрей работает? Или одинаково ? |
||||
|
|||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Знаю, что по возможности нужно использовать префиксный итератор, т.к. префиксный итератор в отличии от постфиксного не возвращает старое значение, которое храниться во временном объекте.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
без проведения теста для конкретной реализации на конкретном компиляторе, ответить на этот вопрос затруднительно..
явно одно, что для подавляющего большинства задач, подобная оптимизация бесмыслена, так как выйгрыш, если и будет, то будет все равно не сушественнен на фоне остальных издержек.. Т.е. в первую очередь оптимизируйте алгоритм, а не то, с чем и компиляжтор сам в состоянии справится. Добавлено через 1 минуту и 39 секунд
дело не в возвращении (возврашают значение оба), а в "лишней" создании копии |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
В разделе книги где я читал про итераторы(после темы про деревья в стиле С++), написано именно так=) блин врут и врут нагло... Просто я почему запомнил это, т.к. дело касалось скорости, а тут увидел тему и сразу вспомнил =) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
скорей всего не врут..просто Вы не правильно расставили акценты.. в том что один возвращает старое значение, а другой измененное - это (смысловое) различие, а вот для того, чтоб вернуть старое, после изменения, нужно предворительно создать его копию - это издержки одного, которые и выливаются в увеличение времени выполнения, но только для типов, для которых копирование относительно дорогая операция.. Это сообщение отредактировал(а) mes - 2.5.2010, 01:01 |
|||
|
||||
| htzg |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
а если так
и
Что быстрей? Или компилятор может оптимизировать первый код? Как узнать что компилятор оптимизирует? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
все что может, и с каждой новой версией компилятора все больше и больше, и поэтому если это не критический к скорости участок, то нужно писать, думая не о мелкой оптимизации, а о качестве алгоритме решения задачи - потому как во втором вопросе компилятор помочь не может и все зависит от программиста. |
|||
|
||||
| htzg |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
Понятно! Спасибо всем!
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
htzg, на будущее - пользуйся стандартными алгоритмами, например, std::for_each. В случае его использования у тебя не будет болеть голова о ++i/i++ и создании итератора, указывающего на конец контейнера... Хотя, я считаю, что лучше всегда использовать ++i и создавать итератор.
|
|||
|
||||
| dengalf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 10.4.2009 Репутация: нет Всего: нет |
Может не совсем в тему, но правда ли, что оператор i-- работает быстрее i++? и что самый быстрый в большинстве случаев цикл - это while с --i. если да - то в чем логика?
|
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Всё таки, в общем случае, программы надо писать для человека, а не для машины. Корректность важнее быстродействия. Это сообщение отредактировал(а) Леопольд - 12.5.2010, 09:25 -------------------- вопросов больше чем ответов |
|||
|
||||
| dengalf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 10.4.2009 Репутация: нет Всего: нет |
Как раз тот случай |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
dengalf, --i лучше тем что не надо сравнивать с size, сравнение с нулем произойдет само
однако я бы не стал делать такую оптимизацию, она почти ничего не даст,к тому же компилятор и сам может заменить порядок обхода Добавлено через 1 минуту и 32 секунды в любом случае надо знать асм и понимать что именно сгенерит компилятор для того или иного кода (компилировать в уме |
|||
|
||||
| dengalf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 10.4.2009 Репутация: нет Всего: нет |
Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "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. |