C++中使用輔助函數尋找最大/最小值:min()、max()、minmax()

當我們需要在一組數據中找到最大值、最小值的時候,我們可以使用C++標準庫中的接口:min()、max()、minmax(),它們的作用如下:

min() : 返回隊列中的最小值

max() : 返回隊列中的最大值

minmax():以數據對的形式(pair)返回隊列中的最大值和最小值

其中miinmax()接口是始於C++11

使用這個三個函數接口時,需要包含頭文件 algorithm

關於這三個接口的使用,代碼如下:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct st
{
	int value;
	st(int v):value(v){}
};

bool mincmp(st a, st b)
{
	return a.value < b.value;
}

bool maxcmp(st a, st b)
{
	return a.value < b.value;
}


int main()
{
	st s1(1);
	st s2(2);
	st s3(3);

	// min()
	min(1, 2);					
	min(s1, s2, mincmp);		
	min({ s1,s2,s3 }, mincmp);

	// max()
	max(1, 2);					
	max(s1, s2, maxcmp);
	max({ s1,s2,s3 }, maxcmp);

	// minmax()
	minmax(1, 2);
	minmax(s1, s2, mincmp);
	minmax({ s1, s2,s3 }, mincmp);

	// 關於 minmax() 的返回值: pair<>數據對
	pair<int, int> m1 = minmax(1, 2);
	pair<st, st> m2 = minmax(s1, s2, mincmp);
	pair<st, st> m3 = minmax({ s1,s2,s3 }, mincmp);
	
    // 也可以使用自定義類型推導
	auto m4 = minmax({ 1,2,3 });
	cout << "first = " << m4.first << endl;		// 1, first  - 最小值
	cout << "second= " << m4.second << endl;    // 3,second - 最大值

	return 0;
}

其中minmax()函數的返回值,類型爲pair,即數據對類型,其中first,代表數據中的最小值,second代表數據中的最大值。

當返回值聲明不便於書寫的時候,我們可以使用自動類型推導auto關鍵詞來進行聲明。例如:

auto res = minmax({1,2,3});

輸入結果,可以直接輸出數據對中的first和second變量:

auto res = minmax({ 1,2,3 });
cout << "min = " << res.first << endl;
cout << "max = " << res.second << endl;

謝謝閱讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章