std::find,s...:find_if_not(3)
π std::find,s...:find_if_not(3) π
okay so bestie, this is a page from the C++ Standard Libary manual (yes, that spelling is literally in the header, no cap). Itβs section 3, and the full cast is in the NAME below. π
πΈ NAME πΈ
std::find, std::find_if, std::find_if_not β std::find,std::find_if,std::find_if_not
β¨ Synopsis β¨
Defined in header <algorithm>
(1) β find, InputIt overload:
template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );
(constexpr since C++20) (until C++26)
template< class InputIt, class T = typename std::iterator_traits<InputIt>::value_type >
constexpr InputIt find( InputIt first, InputIt last, const T& value );
(since C++26)
(2) β find, ExecutionPolicy overload:
template< class ExecutionPolicy, class ForwardIt, class T >
ForwardIt find( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, const T& value );
(since C++17) (until C++26)
template< class ExecutionPolicy, class ForwardIt, class T = typename std::iterator_traits<ForwardIt>::value_type >
ForwardIt find( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, const T& value );
(since C++26)
(3) β find_if, InputIt overload:
template< class InputIt, class UnaryPred >
InputIt find_if( InputIt first, InputIt last, UnaryPred p );
(constexpr since C++20)
(4) β find_if, ExecutionPolicy overload:
template< class ExecutionPolicy, class ForwardIt, class UnaryPred >
ForwardIt find_if( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryPred p );
(since C++17)
(5) β find_if_not, InputIt overload:
template< class InputIt, class UnaryPred >
InputIt find_if_not( InputIt first, InputIt last, UnaryPred q );
(since C++11) (constexpr since C++20)
(6) β find_if_not, ExecutionPolicy overload:
template< class ExecutionPolicy, class ForwardIt, class UnaryPred >
ForwardIt find_if_not( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryPred q );
(since C++17)
Returns an iterator to the first element in the range [first, last) that satisfies specific criteria (or last if there is no such iterator).
1)findsearches for an element equal tovalue(usingoperator==).3)find_ifsearches for an element for which predicatepreturnstrue.5)find_if_notsearches for an element for which predicateqreturnsfalse.2,4,6)Same as(1,3,5), but executed according topolicy. These overloads participate in overload resolution only ifstd::is_execution_policy_v<std::decay_t<ExecutionPolicy>>istrue(until C++20), orstd::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>istrue(since C++20).
π Parameters π
first,lastβ the range of elements to examine.valueβ value to compare the elements to.policyβ the execution policy to use. See execution policy for details.pβ unary predicate which returnstruefor the required element. The expressionp(v)must be convertible toboolfor every argumentvof type (possibly const)VT, whereVTis the value type ofInputIt, regardless of value category, and must not modifyv. Thus, a parameter type ofVT&is not allowed, nor isVTunless forVTa move is equivalent to a copy (since C++11).qβ unary predicate which returnsfalsefor the required element. The expressionq(v)must be convertible toboolfor every argumentvof type (possibly const)VT, whereVTis the value type ofInputIt, regardless of value category, and must not modifyv. Thus, a parameter type ofVT&is not allowed, nor isVTunless forVTa move is equivalent to a copy (since C++11).
π¦ Type requirements π¦
InputItmust meet the requirements ofLegacyInputIterator.ForwardItmust meet the requirements ofLegacyForwardIterator.UnaryPredicatemust meet the requirements ofPredicate.
π Return value π
The first iterator it in the range [first, last) satisfying the following condition, or last if there is no such iterator:
1,2)*it == valueistrue.3,4)p(*it)istrue.5,6)q(*it)isfalse.
π₯ Complexity π₯
Given N as std::distance(first, last):
1,2)At mostNcomparisons withvalueusingoperator==.3,4)At mostNapplications of the predicatep.5,6)At mostNapplications of the predicateq.
π Exceptions π
The overloads with a template parameter named ExecutionPolicy report errors as follows:
- If execution of a function invoked as part of the algorithm throws an exception and
ExecutionPolicyis one of the standard policies,std::terminateis called. For any otherExecutionPolicy, the behavior is implementation-defined. - If the algorithm fails to allocate memory,
std::bad_allocis thrown.
π Possible implementation π
find
template<class InputIt, class T = typename std::iterator_traits<InputIt>::value_type>
constexpr InputIt find(InputIt first, InputIt last, const T& value)
{
for (; first != last; ++first)
if (*first == value)
return first;
return last;
}
find_if
template<class InputIt, class UnaryPred>
constexpr InputIt find_if(InputIt first, InputIt last, UnaryPred p)
{
for (; first != last; ++first)
if (p(*first))
return first;
return last;
}
find_if_not
template<class InputIt, class UnaryPred>
constexpr InputIt find_if_not(InputIt first, InputIt last, UnaryPred q)
{
for (; first != last; ++first)
if (!q(*first))
return first;
return last;
}
π Notes π
If C++11 is not available, an equivalent to std::find_if_not is to use std::find_if with the negated predicate.
template<class InputIt, class UnaryPred>
InputIt find_if_not(InputIt first, InputIt last, UnaryPred q)
{
return std::find_if(first, last, std::not1(q));
}
Feature-test macro:
__cpp_lib_algorithm_default_value_typeβ value202403(C++26), feature: List-initialization for algorithms(1,2).
π Example π
The following example finds numbers in given sequences.
// Run this code
#include <algorithm>
#include <array>
#include <cassert>
#include <complex>
#include <iostream>
#include <vector>
int main()
{
const auto v = {1, 2, 3, 4};
for (const int n : {3, 5})
(std::find(v.begin(), v.end(), n) == std::end(v))
? std::cout << "v does not contain " << n << '\n'
: std::cout << "v contains " << n << '\n';
auto is_even = [](int i) { return i % 2 == 0; };
for (const auto& w : {std::array{3, 1, 4}, {1, 3, 5}})
if (auto it = std::find_if(begin(w), end(w), is_even); it != std::end(w))
std::cout << "w contains an even number " << *it << '\n';
else
std::cout << "w does not contain even numbers\n";
std::vector<std::complex<double>> nums{{4, 2}};
#ifdef __cpp_lib_algorithm_default_value_type
// T gets deduced making list-initialization possible
const auto it = std::find(nums.begin(), nums.end(), {4, 2});
#else
const auto it = std::find(nums.begin(), nums.end(),
std::complex<double>{4, 2});
#endif
assert(it == nums.begin());
}
π Output π
v contains 3
v does not contain 5
w contains an even number 4
w does not contain even numbers
π Defect reports π
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
- DR
LWG 283, applied toC++98.- Behavior as published:
Twas required to beEqualityComparable, but the value type ofInputItmight not beT. - Correct behavior: removed the requirement.
- Behavior as published:
π«Ά See also π«Ά
adjacent_findβ finds the first two adjacent items that are equal (or satisfy a given predicate) (function template)find_endβ finds the last sequence of elements in a certain range (function template)find_first_ofβ searches for any one of a set of elements (function template)mismatchβ finds the first position where two ranges differ (function template)searchβ searches for a range of elements (function template)ranges::find,ranges::find_if,ranges::find_if_notβ finds the first element satisfying specific criteria (C++20) (niebloid)
thatβs the whole page, bestie β source http://cppreference.com, version/date 2024.06.10, page id std::find,s...:find_if_not(3). mwah πβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms