<개인공부>/[C++]

[C++] minmax() 최대값 최소값을 동시에 구하는 함수에 대해서

BlockDMask 2019. 11. 25. 00:09
반응형

안녕하세요! BlockDMask 입니다. 펭하펭하 

지난 시간에는 C++에서 최대값을 구할 수 있는 max 함수와, 최소값을 구할 수 있는 min 함수에 대해서 알아보았습니다.

최대값,최소값 함수 복습 [바로가기]

오늘은 최대값, 최소값을 동시에 구할수 있는 조금 특별한 함수에 대해서 알아보려고 합니다.

최대 최소를 한번에 구하는 minmax 함수는 C++11 에서부터 사용이 가능합니다.


(당장 다음달부터 2020년이 되는 이시국에 C++11은 이제 따로 표기안하고 Default라 생각해도 좋을듯 싶습니다.

C++14, 17 기술들도 이미 많이 사용중이고, 곧 C++20도 나온다 합니다.

C++11은 이제 기존 기업들도 많이 사용하고 있지 않을까 하는 생각이 듭니다.

그러니 취직준비하시는 분들은 기존 C++ 책에서 다루지 않거나 대충 다루는 C++11,14 기술도 습득하고 있으면 더 좋겠죠?)


<목차>

1. C++ std::minmax 함수의 정의 및 선언

2. 최대최소값 minmax pair 예제


1. minmax 함수에 대해서


▶ 사전지식 : auto 와 pair에 대해서

1) auto 키워드

(나중에 자세히 포스트로 다룰게요. 지금은 간단하게!)

auto는 C++11이후부터는 매우 새롭게 바뀌어서, 그냥 C++11 부터 사용할 수 있다 생각하시면 좋을것 같습니다.

to 키워드를 사용하면 초깃값의 형식에 맟춰 선언하는 인스턴스(변수)의 형식이 '자동'으로 결정된다.

auto는 타입을 추론해서 변수에 맞게 "자동으로" 변수의 형식을 지정해주는 키워드입니다. 

auto a = 1;                //a는 int 타입

auto b = "BlockDMask"    //b는 string 타입

auto c = 2.2f;        //c는 float 타입

이렇게 초기 값을 지정하면 자동으로 타입이 지정 되는 그런 만능 키워드 입니다.


2) pair 클래스

두개의 타입을 하나의 타입으로 다룰 수 있게 묶어주는 클래스입니다.

예를들어

pair<int, int> p;           //int 타입과 int 타입을 하나의 타입으로 묶음

pair<string, int> p;      //string 타입과 int 타입을 하나의 타입으로 묶음

pair<int, float> p;        //int 타입과 float 타입을 하나의 타입으로 묶음

pair<string, string> p; //int 타입과 string 타입을 하나의 타입으로 묶음

접근은 p.first, p.second로 접근합니다.

C++ pair에 대해 자세히 알고싶다면 [바로가기]


std::minmax 함수 원형

헤더파일 : <algorithm>


1. 인자를 두개 받는 minmax() 함수

template<class T> 

pair<const T&, const T&> minmax(const T& a, const T& b);


2. 리스트를 인수로 받는 minmax() 함수

template<class T>

pair<const T&, const T&> minmax(initializer_list<T> ilist);


1번은 두개의 인자를 받아서 둘중 어느것이 minmax인지 구분해서 pair<T, T>로 반환을 해주는 함수 입니다.

2번은 리스트(initializer_list)를 인자로 받아서 리스트 내부에서 최소값과 최대값을 찾아서 pair<T, T>로 반환해주는 함수입니다.


위에서 간단히 배운 pair를 반환하고있죠?

타입이 T로 같은 a, b의 작은것과 큰것으로 구분해서 pair<T, T> 타입으로 반환해주는 함수 입니다.

pair의 first = 최소값

pair의 second = 최대값

이렇게 이쁘장하게 pair에 넣어서 반환해주는 함수 minmax 입니다.


▶ minmax 초간단 예제

std::minmax(10, 20);                //return : pair<int, int> 타입으로 (10,20) 이 들어갑니다.

std::minmax({10,20,50,40,30});   //return : pair<int, int> 타입으로 (10, 50)이 들어갑니다.



2. C++ minmax 한번에 구하는 함수 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>    //cout
#include<algorithm>    //minmax
#include<vector>    //vector
#include<utility>    //pair
using namespace std;
 
int main(void)
{
    cout << "\n[C++ minmax 예제1] minmax(숫자, 숫자)" << endl;
    pair<intint> a1    = minmax(10200);
    auto a2                = minmax(10200);
 
    cout << "pair<int, int> b1 : " << a1.first << ", " << a1.second << endl;
    cout << "auto b2          : " << a2.first << ", " << a2.second << endl;
 
    cout << "\n[C++ minmax 예제2] minmax(initializer_list)" << endl;
    pair<intint> b1    = minmax({ 1091254758 });
    auto b2                = minmax({ 1091254758 });
 
    cout << "pair<int, int> b1 : " << b1.first << ", " << b1.second << endl;
    cout << "auto b2          : " << b2.first << ", " << b2.second << endl;
    return 0;
}
cs


▶ 예제 결과


이렇게 한번에 최대값 최소값을 구하는 minmax 함수에 대해 알아 보았습니다.

위 예제에서 처럼 pair<int, int>에 담아도 상관은 없지만, auto와 코드 차이가 어마어마 하죠? 

어떤식으로 사용할지는 본인 판단에 맡기겠습니다.

만약 min, max 따로따로 구하는 함수를 알고 싶다면 [바로가기]

감사합니다.

반응형