0% found this document useful (0 votes)
157 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
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
157 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
We take content rights seriously. If you suspect this is your content, claim it here.
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