Деякі аргументи мають версії з закінченням _if. Їм потрібний додатковий параметр, який називається предикатом і є функціональним об’єктом чи функцією. Наприклад, алгоритм find() знаходить всі елементи, рівні вказаному значенню. Можна написати функцію, яка працює з алгоритмом find_if() і знаходить елементи з якимись додатковими параметрами.
В прикладі 15.8 використовуються об’єкти класу string. Алгоритму find_if() передається функція користувача isDon, щоб можна було знайти перший рядок в масиві, що має значення Ivan
#include<iostream>
#include<conio>
#include<string>
#include<algorithm>
using namespace std;
bool isDon(string name)
{return name==”Ivan”;}
string names[]={“Sergij”,”Andrij”,”Ulana”,”Tetana”,”Ivan”,”Ivanna”};
int main()
{string* ptr;
ptr=find_if(names,names+5,isDon);
if(ptr==names+5)
cout<<”Ivana nemae v spysku\n”;
else
cout<<”Ivan zapysanyj v pozycii “
<<(ptr-names)
<<” v spysku \n”;
getch();
return 0;
}
Програма 15.8

Адреса функції isDon() – третій елемент алгоритму find_if(), а перші два, як звичайно, задають діапазон пошуку від початку до «післяостаннього» елементу масиву.
Алгоритм find_if() застосовує функцію is_Don() до кожного елементу з діапазону. Якщо is_Don() повертає true для якого-небудь елемента, то find_if() повертає значення ітератора для цього елементу. В протилежному випадку повертається вказівник на адресу «Післяостаннього» елементу масиву.
_if-версії є також в інших алгоритмів, наприклад, count(), replace(), remove().