Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::find,std::find_if,std::find_if_not

      From cppreference.com
      <cpp‎ |algorithm
       
       
      Algorithm library
      Constrained algorithms and algorithms on ranges(C++20)
      Constrained algorithms, e.g.ranges::copy,ranges::sort, ...
      Execution policies(C++17)
      Sorting and related operations
      Partitioning operations
      Sorting operations
      Binary search operations
      (on partitioned ranges)
      Set operations (on sorted ranges)
      Merge operations (on sorted ranges)
      Heap operations
      Minimum/maximum operations
      (C++11)
      (C++17)
      Lexicographical comparison operations
      Permutation operations
      C library
      Numeric operations
      Operations on uninitialized memory
       
      Defined in header<algorithm>
      (1)
      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=typenamestd::iterator_traits

                                             <InputIt>::value_type>

      constexpr InputIt find( InputIt first, InputIt last,const T& value);
      (since C++26)
      (2)
      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=typenamestd::iterator_traits
                                               <ForwardIt>::value_type>
      ForwardIt find( ExecutionPolicy&& policy,

                      ForwardIt first, ForwardIt last,const T& value);
      (since C++26)
      template<class InputIt,class UnaryPred>
      InputIt find_if( InputIt first, InputIt last, UnaryPred p);
      (3)(constexpr since C++20)
      template<class ExecutionPolicy,class ForwardIt,class UnaryPred>

      ForwardIt find_if( ExecutionPolicy&& policy,

                         ForwardIt first, ForwardIt last, UnaryPred p);
      (4)(since C++17)
      template<class InputIt,class UnaryPred>
      InputIt find_if_not( InputIt first, InputIt last, UnaryPred q);
      (5)(since C++11)
      (constexpr since C++20)
      template<class ExecutionPolicy,class ForwardIt,class UnaryPred>

      ForwardIt find_if_not( ExecutionPolicy&& policy,

                             ForwardIt first, ForwardIt last, UnaryPred q);
      (6)(since C++17)

      Returns an iterator to the first element in the range[firstlast) that satisfies specific criteria (orlast if there is no such iterator).

      1)find searches for an element equal tovalue (usingoperator==).
      3)find_if searches for an element for which predicatep returnstrue.
      5)find_if_not searches for an element for which predicateq returnsfalse.
      2,4,6) Same as(1,3,5), but executed according topolicy.
      These overloads participate in overload resolution only if all following conditions are satisfied:

      std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> istrue.

      (until C++20)

      std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> istrue.

      (since C++20)

      Contents

      [edit]Parameters

      first, last - the pair of iterators defining therange of elements to examine
      value - value to compare the elements to
      policy - theexecution policy to use
      p - unary predicate which returns ​true for the required element.

      The expressionp(v) must be convertible tobool for every argumentv of type (possibly const)VT, whereVT is the value type ofInputIt, regardless ofvalue category, and must not modifyv. Thus, a parameter type ofVT&is not allowed, nor isVT unless forVT a move is equivalent to a copy(since C++11).​

      q - unary predicate which returns ​false for the required element.

      The expressionq(v) must be convertible tobool for every argumentv of type (possibly const)VT, whereVT is the value type ofInputIt, regardless ofvalue category, and must not modifyv. Thus, a parameter type ofVT&is not allowed, nor isVT unless forVT a move is equivalent to a copy(since C++11).​

      Type requirements
      -
      InputIt must meet the requirements ofLegacyInputIterator.
      -
      ForwardIt must meet the requirements ofLegacyForwardIterator.
      -
      UnaryPredicate must meet the requirements ofPredicate.

      [edit]Return value

      The first iteratorit in therange[firstlast) satisfying the following condition orlast if there is no such iterator:

      1,2)*it== value istrue.
      3,4)p(*it) istrue.
      5,6)q(*it) isfalse.

      [edit]Complexity

      Given\(\scriptsize N\)N asstd::distance(first, last):

      1,2) At most\(\scriptsize N\)N comparisons withvalue usingoperator==.
      3,4) At most\(\scriptsize N\)N applications of the predicatep.
      5,6) At most\(\scriptsize N\)N applications of the predicateq.

      [edit]Exceptions

      The overloads with a template parameter namedExecutionPolicy report errors as follows:

      • If execution of a function invoked as part of the algorithm throws an exception andExecutionPolicy is one of thestandard policies,std::terminate is called. For any otherExecutionPolicy, the behavior is implementation-defined.
      • If the algorithm fails to allocate memory,std::bad_alloc is thrown.

      [edit]Possible implementation

      find (1)
      template<class InputIt,class T=typenamestd::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 (3)
      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 (5)
      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;}

      [edit]Notes

      If C++11 is not available, an equivalent tostd::find_if_not is to usestd::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 macroValueStdFeature
      __cpp_lib_algorithm_default_value_type202403(C++26)List-initialization for algorithms(1,2)

      [edit]Example

      The following example finds numbers in given sequences.

      Run this code
      #include <algorithm>#include <array>#include <cassert>#include <complex>#include <initializer_list>#include <iostream>#include <vector> bool is_even(int i){return i%2==0;} void example_contains(){constauto haystack={1,2,3,4}; for(constint needle:{3,5})if(std::find(haystack.begin(), haystack.end(), needle)== haystack.end())std::cout<<"haystack does not contain "<< needle<<'\n';elsestd::cout<<"haystack contains "<< needle<<'\n';} void example_predicate(){for(constauto& haystack:{std::array{3,1,4},{1,3,5}}){constauto it= std::find_if(haystack.begin(), haystack.end(), is_even);if(it!= haystack.end())std::cout<<"haystack contains an even number "<<*it<<'\n';elsestd::cout<<"haystack does not contain even numbers\n";}} void example_list_init(){std::vector<std::complex<double>> haystack{{4.0,2.0}};#ifdef __cpp_lib_algorithm_default_value_type// T gets deduced making list-initialization possibleconstauto it= std::find(haystack.begin(), haystack.end(),{4.0,2.0});#elseconstauto it= std::find(haystack.begin(), haystack.end(),std::complex{4.0,2.0});#endifassert(it== haystack.begin());} int main(){    example_contains();    example_predicate();    example_list_init();}

      Output:

      haystack contains 3haystack does not contain 5haystack contains an even number 4haystack does not contain even numbers

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 283C++98T was required to beEqualityComparable, but
      the value type ofInputIt might not beT
      removed the requirement

      [edit]See also

      finds the first two adjacent items that are equal (or satisfy a given predicate)
      (function template)[edit]
      finds the last sequence of elements in a certain range
      (function template)[edit]
      searches for any one of a set of elements
      (function template)[edit]
      finds the first position where two ranges differ
      (function template)[edit]
      searches for the first occurrence of a range of elements
      (function template)[edit]
      finds the first element satisfying specific criteria
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/find&oldid=180613"

      [8]ページ先頭

      ©2009-2025 Movatter.jp