0% found this document useful (0 votes)
151 views

STD Find, STD Find If, STD Find If Not - Cppreference

std::find, std::find_if, and std::find_if_not are functions in the <algorithm> header that search for elements in a range that meet specific criteria: std::find searches for an element equal to a given value, std::find_if searches for an element where a predicate returns true, and std::find_if_not searches for an element where a predicate returns false. All functions return an iterator to the first matching element or last if no match is found.

Uploaded by

IoakeimTziakos
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
151 views

STD Find, STD Find If, STD Find If Not - Cppreference

std::find, std::find_if, and std::find_if_not are functions in the <algorithm> header that search for elements in a range that meet specific criteria: std::find searches for an element equal to a given value, std::find_if searches for an element where a predicate returns true, and std::find_if_not searches for an element where a predicate returns false. All functions return an iterator to the first matching element or last if no match is found.

Uploaded by

IoakeimTziakos
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

std::nd, std::nd_if, std::nd_if_not

Dened in header <algorithm>

template< class InputIt, class T >


InputIt find( InputIt first, InputIt last, const T& value );

(1)

template< class InputIt, class UnaryPredicate >


InputIt find_if( InputIt first, InputIt last,
UnaryPredicate p );

(2)

template< class InputIt, class UnaryPredicate >


InputIt find_if_not( InputIt first, InputIt last,
UnaryPredicate q );

(3)

(sinc e C++11)

Returns the rs t element in the range [first, last)that s atis es s pecic criteria:
1) finds earches for an element equal to value
2) find_ifs earches for an element for which predicate preturns true
3) find_if_nots earches for an element for which predicate qreturns false

Parameters
first, last - the range of elements to examine
value - value to compare the elements to
p - unary predicate which returns true for the required element.
The s ignature of the predicate function s hould be equivalent to the following:
bool pred(const Type &a);
The s ignature does not need to have const &, but the function mus t not modify the
objects pas s ed to it.
The type Type mus t be s uch that an object of type InputIt can be dereferenced
and then implicitly converted to Type.
q - unary predicate which returns false for the required element.
The s ignature of the predicate function s hould be equivalent to the following:
bool pred(const Type &a);
The s ignature does not need to have const &, but the function mus t not modify the
objects pas s ed to it.
The type Type mus t be s uch that an object of type InputIt can be dereferenced
and then implicitly converted to Type.
Type requirements
-

InputItmus t meet the requirements of InputIterator.


UnaryPredicatemus t meet the requirements of Predicate.

Return value
Iterator to the rs t element s atis fying the condition or lastif no s uch element is found.

Complexity
At mos t last- firstapplications of the predicate

Possible implementation
First version

template<class InputIt, class T>


InputIt find(InputIt first, InputIt last, const T& value)
{
for (; first != last; ++first) {
if (*first == value) {
return first;
}
}
return last;
}
Second version
template<class InputIt, class UnaryPredicate>
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p)
{
for (; first != last; ++first) {
if (p(*first)) {
return first;
}
}
return last;
}
Third version
template<class InputIt, class UnaryPredicate>
InputIt find_if_not(InputIt first, InputIt last, UnaryPredicate q)
{
for (; first != last; ++first) {
if (!q(*first)) {
return first;
}
}
return last;
}

If you do not have C++11, an equivalent to std::find_if_notis to us e std::find_ifwith the negated


predicate.

template<class InputIt, class UnaryPredicate>


InputIt find_if_not(InputIt first, InputIt last, UnaryPredicate q)
{
return std::find_if(first, last, std::not1(q));
}

Example
The following example nds an integer in a vector of integers .
Run this code

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>

int main()
{
int n1 = 3;
int n2 = 5;

std::vector<int> v{0, 1, 2, 3, 4};

auto result1 = std::find(std::begin(v), std::end(v), n1);


auto result2 = std::find(std::begin(v), std::end(v), n2);
if (result1 != std::end(v)) {
std::cout << "v contains: " << n1 << '\n';
} else {
std::cout << "v does not contain: " << n1 << '\n';
}
if (result2 != std::end(v)) {
std::cout << "v contains: " << n2 << '\n';
} else {
std::cout << "v does not contain: " << n2 << '\n';
}

Output:
v contains: 3
v does not contain: 5

See also
adjacent_find

nds the rs t two adjacent items that


are equal (or s atis fy a given predicate)
(func tion template)

find_end

nds the las t s equence of elements in a


certain range
(func tion template)

find_first_of

s earches for any one of a s et of


elements
(func tion template)

mismatch

nds the rs t pos ition where two ranges


dier
(func tion template)

search
std::experimental::parallel::find(parallelism TS )
std::experimental::parallel::find_if(parallelism TS )

s earches for a range of elements


(func tion template)

parallelized vers ion of std::find


(func tion template)

parallelized vers ion of std::find_if


(func tion template)

parallelized vers ion of


std::experimental::parallel::find_if_not(parallelism TS ) std::find_if_not
(func tion template)
Retrieved from "http://en.c ppreferenc e.c om/mwiki/index.php?title=c pp/algorithm/nd& oldid=79876"

You might also like