![]() |
|
Модераторы: bsa |
![]()
|
|
| stat007 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 521 Регистрация: 9.10.2008 Репутация: -2 Всего: -4 |
Нкжно найти с помощью алгоритма find или find_if, максимальное и минимальное значение последовательности (массива или вектора), а также с помошью алгоритма accumulate подсчитать сумму элементов между этими max и min значениями.
PS. Так же будет неплохо найти мести на которых стоят max и min значения. |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
выкладывайте наработки кода. или идите в Центр Помощи.
|
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
Мне даже интересно, а что не получается?
-------------------- |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
открыть MSDN
Это сообщение отредактировал(а) zim22 - 14.5.2009, 09:21 |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
zim22,
+ поставлю, хороший ты человек -------------------- |
|||
|
||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Если без find, то можно использовать алгоритмы max_element и min_element (правда работать будет медленнее, чем у Zim22)
|
|||
|
||||
| Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
так надо было с find, зачем без него-то...
тогда зачем ваще так делать? -------------------- |
||||
|
|||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
У разных подходов есть как достоинства так и недостатки. В данном случае в варианте zim22 я вижу следующие недостатки (2zim22 без обид, это просто моё мнение о коде, а не о программисте): 1) Глобальные переменные int min, max; int maxPos, minPos; 2)find_if используется немного не по назначению (по смыслу больше подходит foe_each) Такие разногласия затрудняют чтение программы сторонними разработчиками Если же использовать 2 функтора и 2 вызова find_if, то тогда обе версии сравняются по производительности 3) Не понравилась вот это строчка if (minPos > maxPos) std::swap(minPos, maxPos); Не могу точно сказать почему не понравилась, просто такое впечатление Хотя мой эквивалент тоже не блещет красотой (sum = (max >= min)?accumulate(min+1,max,0):accumulate(max+1,min,0);) На мой взгляд вторая версия исправляет эти недостатки + она короче Это сообщение отредактировал(а) sdukshis - 14.5.2009, 14:11 |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
так лучше?
|
||||
|
|||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Если честно, то не совсем. 1) Используется 2 прохода по массиву для поиска min и max (в первом варианте был 1) 2) Зачем хранить значения min и max, когда их легко получить по итераторам (указателям) 3) Не очень разбирающийся пользователь может в дальнейшем много раз вызывать min() max() и sum(), не понимая почему падает производительность. 4) Кажется sum() будет возвращать сумму всех элементов, а не искомых. Зато есть очень большое плюс Благодаря обобщённому решению можно реализовать задачу всего одной строчкой для любых последовательных контейнеров. Правда это же можно сделать и используя for_each() с соответствующим функтором. Это сообщение отредактировал(а) sdukshis - 14.5.2009, 19:43 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
замечания справедливые. но если убрать эти недостатки, то получится очень даже ничего |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
sdukshis,
На мой взгляд вторая версия исправляет эти недостатки + она короче boost::minmax_element исправяет недостатки в виде двух проходов, + он ещё короче. :gigi: |
|||
|
||||
![]()
|
| Правила форума "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. |