Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2020, 11:30   #1
Александр222
Пользователь
 
Регистрация: 15.04.2020
Сообщений: 59
Вопрос Алгоритм find_if

C++
Существует алгоритм find_if

Код:
template <class InputIterator, class Predicate>
void find_if(InputIterator first, InputIterator last, Predicate Functor){
    bool IsOdd(int i) { return ((i % 2) == 1); }

    while (first != last) { 
        if (Functor(*first)) return first; ++first;
    }
    return last;
}
Никак не могу понять, как происходит вывод ответа на экран. То есть, например, у меня есть числа 10, 25, 40, 55
После использования find_if ответ должен быть 25

Вот наработки, исходя из учебника Лаптева.

Код:
int main() {

    int array[] = { 10, 25, 40, 55 };
   
    find_if(array[0], array[4], IsOdd());
    IsOdd f;
    find_if(array[0], array[4], f);
}

Последний раз редактировалось Александр222; 24.10.2020 в 11:33.
Александр222 вне форума Ответить с цитированием
Старый 25.10.2020, 09:23   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Александр222,

Код:
#include <iostream>
#include <algorithm>

int main() {

    int array[]{ 10, 25, 40, 55 };
   
    auto result=std::find_if(std::begin(array), std::end(array), [](const auto item)
    {
        return item%2;
    });
    
    if(result!=std::end(array))
    {
        std::cout<<*result;
    }
}
Алексей1153 вне форума Ответить с цитированием
Старый 25.10.2020, 10:17   #3
Александр222
Пользователь
 
Регистрация: 15.04.2020
Сообщений: 59
По умолчанию

Алексей1153, Спасибо! Такое я видел много раз) В задании сказано написать алгоритм конкретно по этому примеру. Как я и пытался сделать
e.jpg
Александр222 вне форума Ответить с цитированием
Старый 25.10.2020, 12:40   #4
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от Александр222 Посмотреть сообщение
find_if(array[0], array[4], IsOdd());
тут хотят объект-функтор (класс с определённым оператором() ). Объект создаётся временный

Цитата:
Сообщение от Александр222 Посмотреть сообщение
find_if(array[0], array[4], f);
здесь может быть тот же объект - заранее созданный. Либо это может быть статическая функция или лямбда (у меня пример с лямбдой)
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Найти самое длинное слово в строке, Используя std::find_if , strlen, isspace. Есть код. Я всё верно делаю? dimaSlon Помощь студентам 0 28.06.2017 10:43
find_if()????? ZMEY_KORAL Общие вопросы C/C++ 1 15.02.2012 07:34
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм iamhated Помощь студентам 1 14.01.2012 16:22
алгоритм находит только первое вхождение find_if Progsenya Общие вопросы C/C++ 5 11.09.2010 10:38
реализация алгоритма find_if Progsenya Общие вопросы C/C++ 2 10.09.2010 23:58