Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::max

      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
      max
      (C++11)
      (C++17)
      Lexicographical comparison operations
      Permutation operations
      C library
      Numeric operations
      Operations on uninitialized memory
       
      Defined in header<algorithm>
      template<class T>
      const T& max(const T& a,const T& b);
      (1)(constexpr since C++14)
      template<class T,class Compare>
      const T& max(const T& a,const T& b, Compare comp);
      (2)(constexpr since C++14)
      template<class T>
      T max(std::initializer_list<T> ilist);
      (3)(since C++11)
      (constexpr since C++14)
      template<class T,class Compare>
      T max(std::initializer_list<T> ilist, Compare comp);
      (4)(since C++11)
      (constexpr since C++14)

      Returns the greater of the given values.

      1,2) Returns the greater ofa andb.
      1) Usesoperator< to compare the values.
      IfT is notLessThanComparable, the behavior is undefined.
      2) Use the comparison functioncomp to compare the values.
      3,4) Returns the greatest of the values in initializer listilist.
      Ifilist.size() is zero, orT is notCopyConstructible, the behavior is undefined.
      3) Usesoperator< to compare the values.
      IfT is notLessThanComparable, the behavior is undefined.
      4) Use the comparison functioncomp to compare the values.

      Contents

      [edit]Parameters

      a, b - the values to compare
      ilist - initializer list with the values to compare
      comp - comparison function object (i.e. an object that satisfies the requirements ofCompare) which returnstrue ifa isless thanb.

      The signature of the comparison function should be equivalent to the following:

      bool cmp(const Type1& a,const Type2& b);

      While the signature does not need to haveconst&, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const)Type1 andType2 regardless ofvalue category (thus,Type1& is not allowed, nor isType1 unless forType1 a move is equivalent to a copy(since C++11)).
      The typesType1 andType2 must be such that an object of typeT can be implicitly converted to both of them.

      [edit]Return value

      1,2) The greater ofa andb. If they are equivalent, returnsa.
      3,4) The greatest value inilist. If several values are equivalent to the greatest, returns the leftmost one.

      [edit]Complexity

      1) Exactly one comparison usingoperator<.
      2) Exactly one application of the comparison functioncomp.
      3,4) Given\(\scriptsize N\)N asilist.size():
      3) Exactly\(\scriptsize N-1\)N-1 comparisons usingoperator<.
      4) Exactly\(\scriptsize N-1\)N-1 applications of the comparison functioncomp.

      [edit]Possible implementation

      max (1)
      template<class T>const T& max(const T& a,const T& b){return(a< b)? b: a;}
      max (2)
      template<class T,class Compare>const T& max(const T& a,const T& b, Compare comp){return(comp(a, b))? b: a;}
      max (3)
      template<class T>T max(std::initializer_list<T> ilist){return*std::max_element(ilist.begin(), ilist.end());}
      max (4)
      template<class T,class Compare>T max(std::initializer_list<T> ilist, Compare comp){return*std::max_element(ilist.begin(), ilist.end(), comp);}

      [edit]Notes

      Capturing the result ofstd::max by reference produces a dangling reference if one of the parameters is a temporary and that parameter is returned:

      int n=-1;constint& r= std::max(n+2, n*2);// r is dangling

      [edit]Example

      Run this code
      #include <algorithm>#include <iomanip>#include <iostream>#include <string_view> int main(){auto longest=[](conststd::string_view s1,conststd::string_view s2){return s1.size()< s2.size();}; std::cout<<"Larger of 69 and 96 is "<< std::max(69,96)<<"\n""Larger of 'q' and 'p' is '"<< std::max('q','p')<<"'\n""Largest of 010, 10, 0X10, and 0B10 is "<< std::max({010,10,0X10,0B10})<<'\n'<< R"(Longest of "long", "short", and "int" is )"<<std::quoted(std::max({"long","short","int"}, longest))<<'\n';}

      Output:

      Larger of 69 and 96 is 96Larger of 'q' and 'p' is 'q'Largest of 010, 10, 0X10, and 0B10 is 16Longest of "long", "short", and "int" is "short"

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 281C++98T was required to beCopyConstructible for overloads(1,2)not required
      LWG 2239C++98
      C++11
      1.T was required to beLessThanComparable for
          overloads(2) (C++98) and(4) (C++11)
      2. the complexity requirements were missing
      1. not required
      2. added the requirements

      [edit]See also

      returns the smaller of the given values
      (function template)[edit]
      (C++11)
      returns the smaller and larger of two elements
      (function template)[edit]
      returns the largest element in a range
      (function template)[edit]
      (C++17)
      clamps a value between a pair of boundary values
      (function template)[edit]
      returns the greater of the given values
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/max&oldid=178176"

      [8]ページ先頭

      ©2009-2025 Movatter.jp