当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ Algorithm minmax()用法及代码示例


C++算法minmax()函数有以下3种使用方式:

  1. 它比较在其参数中传递的两个值并返回它们之间的较小和较大的值,如果两者相等,则返回 make_pair (a,b)。
  2. 它还使用由用户定义的二元函数比较这两个值,然后在 std::minmax( 中作为参数传递)。
  3. 它还用于查找给定列表中的最小元素和最大元素,如果有多个,则返回第一个最小,如果列表中有多个最大,则返回最后一个。

第一个版本使用 operator< 比较元素,第二个版本使用给定的二进制比较函数 comp 比较元素。

用法

default (1)     template <class T>
                    pair <const T&,const T&> minmax (const T& a, const T& b);
								   //until C++ 14
custom (2)      template <class T, class Compare>
                 pair <const T&,const T&> minmax (const T& a, const T& b, Compare comp);  
						                             //until C++ 14

initializer list (3)           template <class T>
                                  pair<T,T> minmax (initializer_list<T> il);
                               template <class T, class Compare>
                        pair<T,T> minmax (initializer_list<T> il, Compare comp);  
								 // until C++ 14

default (1)    template <class T>
                       constexpr pair <const T&,const T&> minmax (const T& a, const T& b);  
								  //since C++ 14

custom (2)    template <class T, class Compare>
 	         constexpr pair <const T&,const T&> minmax (const T& a, const T& b, 
						Compare comp););                 
                                                                                                            //since C++ 14

initializer list (3)      template <class T>
                                constexpr pair<T,T> minmax (initializer_list<T> il);
                               template <class T, class Compare>
                     constexpr pair<T,T> minmax (initializer_list<T> il, Compare comp);     
								   //since C++ 14

参数

a:要比较的第一个值。

b:要比较的第二个值。

comp: 一个用户定义的二元谓词函数,它接受两个参数,如果两个参数按顺序返回真,否则返回假。它遵循严格的弱排序来对元素进行排序。

il:一个 initializer_list 与要比较的值。

返回值

它返回较小的作为第一个元素,较大的作为 a 和 b 之间的第二个元素。如果值相等,则返回 make_pair (a,b)。

返回 il 中的最小值作为第一个值和最大值作为第二个值。如果几个值等价于更小,则返回最左边的这样的值,几个值等价于更大的,返回最右边的这样的值。

复杂度

复杂性是比较元素数量的一倍半。

异常

如果任何比较引发异常,则此函数将引发异常。

请注意,无效参数会导致未定义的行为。

例子1

让我们看一个简单的例子来演示 minmax() 的使用:

#include<iostream> 
#include<algorithm> 
using namespace std; 
  
int main() 
{ 
      
// declaring pair to catch the return value 
pair<int, int> mnmx; 
  
// Using minmax(a, b)    
mnmx = minmax(53, 23); 
      
// printing minimum and maximum values 
cout << "The minimum value obtained is:"; 
cout << mnmx.first; 
cout << "\nThe maximum value obtained is:"; 
cout << mnmx.second ; 
      
// Using minmax((array of elements)  
mnmx = minmax({2, 5, 1, 6, 3}); 
      
// printing minimum and maximum values. 
cout << "\n\nThe minimum value obtained is:"; 
cout << mnmx.first; 
cout << "\nThe maximum value obtained is:"; 
cout << mnmx.second; 

return 0;      
}

输出:

The minimum value obtained is:23
The maximum value obtained is:53

The minimum value obtained is:1
The maximum value obtained is:6

例子2

让我们看另一个简单的例子来演示使用默认版本的 minmax() 的使用:

#include <iostream>     // std::cout
#include <algorithm>    // std::minmax

using namespace std;

int main () {
  auto result = minmax({1,2,3,4,5});

  cout << "minmax({1,2,3,4,5}):";
  cout << result.first << ' ' << result.second << '\n';
  return 0;
}

输出:

minmax({1,2,3,4,5}):1 5

例子3

让我们看另一个简单的例子来演示使用比较函数的 minmax() 的使用:

#include <algorithm>
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    vector<int> v {3, 1, 4, 1, 5, 9, 2, 6}; 
    srand(time(0));
    pair<int, int> bounds = minmax(rand() % v.size(),
                                             rand() % v.size());
 
    cout << "v[" << bounds.first << "," << bounds.second << "]:";
    for (int i = bounds.first; i < bounds.second; ++i) {
        cout << v[i] << ' ';
    }
    cout << '\n';
    
    return 0;
}

输出:

v[0,7]:3 1 4 1 5 9 2





相关用法


注:本文由纯净天空筛选整理自 C++ Algorithm minmax()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。