0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
|
||||||
1 | ||||||
Функторы и алгоритмы stl07.12.2010, 01:18. Показов 5597. Ответов 6
Метки нет Все метки)
(
Добрый день! Интересует такой вопрос.
Я хочу, используя стандартный алгоритм стл for_each() и функтор, определить наибольший элемент в векторе. Т.е. функтор должен просматривать последовательность и в конце выводить значение наибольшего элемента. Написал нижеследующий код. Проблема заключается в том, что написанный мной функтор содержит подсчет просмотренных элементов (int i), чтобы сделать вывод только в конце. Т.е. код зависит от количества элементов вектора. Подскажите, пожалуйста, как переписать код функтора, чтобы он не зависел от числа элементов вектора.
0
|
07.12.2010, 01:18 | |
07.12.2010, 01:18 | |
Ответы с готовыми решениями:
6
STL, функторы STL функторы, предикаты
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
||||||
07.12.2010, 02:55 | 2 | |||||
Никак. Разве что передавать в конструктор функционала число элементов массива.
Запомнить значение в функционале тоже не получится, потому что в эстээлевских алгоритмах объекты передаются по значениям, а не по ссылкам. Так что либо пиши свою функцию, либо пользуйся std::min_element / std::max_element, либо std::valarray. Добавлено через 11 минут В принципе, можно сделать и вот так (функтор записывает максимальное значение во внешнюю переменную, ссылку на которую получил в конструкторе), но так не очень круто:
0
|
![]() ![]() 3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||||||||||
07.12.2010, 06:15 | 3 | ||||||||||
Ну, во-первых вы неправильно вычисляете максимум. Инициализируете нулем, а потом сравниваете со значениями вектора. Если все значения вектора будут меньше нуля, то выведется ноль, а не искомый максимум:
0
|
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
|
|
07.12.2010, 08:12 [ТС] | 4 |
volovzi, задача состоит не в нахождении максимума как такового, я ее упростил, чтобы не плодить много кода. Интересен непосредственно сам момент определения конечного элемента вектора.
Mr.X, почему в for_each нельзя использовать функтор в том виде, в котором использую его я?
0
|
![]() ![]() 3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
07.12.2010, 08:39 | 5 |
Я вам продемонстрировал, что алгоритм for_each возвращает объект функтора, которым мы пробежались по контейнеру, и мы спокойно можем извлечь из него информацию, которая там накопилась, поэтому нет необходимости отслеживать момент окончания обработки внутри функтора.
Ну а резвиться и дерзать никто никому не запрещает.
2
|
Модератор
![]() ![]() ![]() ![]() ![]() 12837 / 7573 / 1765
Регистрация: 25.07.2009
Сообщений: 13,969
|
||||||
07.12.2010, 10:57 | 6 | |||||
просто на всякий случай... минимальный/максимальный по модулю элементы:
1
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
07.12.2010, 13:20 | 7 |
Mr.X, ха, никогда не обращал внимания, что "for_each" что-то возвращает. Тогда, действительно, проще.
1
|
07.12.2010, 13:20 | |
07.12.2010, 13:20 | |
Помогаю со студенческими работами здесь
7
функторы && STL
Задача на С++. Алгоритмы библиотеки STL.
Контейнер map и алгоритмы STL: несовместимость? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Linux API: Полное руководство
hw_wired 08.02.2025
Linux API – это низкоуровневый программный интерфейс, обеспечивающий взаимодействие пользовательских приложений с ядром операционной системы. Он включает набор системных вызовов, библиотечных функций. . .
|
Асинхронное программирование и эмуляция async/await в C (СИ)
hw_wired 08.02.2025
Язык программирования C, несмотря на свой возраст, предоставляет неплохие средства для реализации асинхронных операций, позволяя создавать эффективные решения для обработки параллельных задач. В. . .
|
Как сгенерировать случайное число в указанном диапазоне в JavaScript
bytestream 08.02.2025
В JavaScript генерация случайных чисел основана на детерминированном алгоритме, который создает последовательность псевдослучайных значений. Встроенный метод Math. random() возвращает псевдослучайное. . .
|
Как получить список всех таблиц в PostgreSQL
bytestream 08.02.2025
PostgreSQL предлагает несколько методов для получения списка таблиц в базе данных. Наиболее распространенный способ - использование системного каталога pg_tables, который содержит информацию обо всех. . .
|
Java Spring для начинающих
bytestream 08.02.2025
Spring Framework - это универсальное решение для создания корпоративных Java-приложений. Он предоставляет комплексную программную и конфигурационную модель для современных приложений на Java. Spring. . .
|
Асинхронное программирование и async/await в Visual Basic
bytestream 08.02.2025
В основе асинхронного программирования в Visual Basic лежит концепция неблокирующего выполнения операций. Когда программа встречает длительную операцию, например, чтение большого файла или запрос к. . .
|
Async/await и асинхронное программирование в Delphi
bytestream 08.02.2025
Асинхронное программирование является неотъемлемой частью разработки современных приложений, позволяя создавать отзывчивые и эффективные программы. В Delphi реализация асинхронности опирается на. . .
|
Асинхронное программирование и async/await в C#
bytestream 08.02.2025
Асинхронное программирование - концепция, позволяющая приложениям эффективно выполнять длительные операции без блокировки основного потока выполнения. В контексте современной разработки на C# это. . .
|
Асинхронное программирование и горутины/каналы в Go
bytestream 08.02.2025
Язык Go изначально разрабатывался с учетом современных многоядерных процессоров и необходимости эффективного параллельного выполнения задач. В отличие от традиционных подходов к асинхронному. . .
|
Как восстановить stash в Git
hw_wired 08.02.2025
Git stash - это средство для временного сохранения изменений в рабочей директории. В процессе разработки часто возникают ситуации, когда нужно быстро переключиться на другую задачу, но текущие. . .
|