안녕하세요! 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<int, int> a1 = minmax(10, 200); auto a2 = minmax(10, 200); 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<int, int> b1 = minmax({ 10, 9, 1, 2, 5, 4, 7, 5, 8 }); auto b2 = minmax({ 10, 9, 1, 2, 5, 4, 7, 5, 8 }); 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 따로따로 구하는 함수를 알고 싶다면 [바로가기]
감사합니다.
'<개인공부> > [C++]' 카테고리의 다른 글
[C++] override, final 키워드 (가상함수 관련 키워드)에 대해서 (0) | 2020.08.17 |
---|---|
[C++] non-static data member init 에 대해서 (2) | 2020.08.10 |
[C++] enum class (scoped enum) 에 대해서 (5) | 2020.07.30 |
[C++] auto 타입추론에 대해서 (3) | 2019.12.14 |
[C++] 최초값, 최대값 함수 min, max 에 대해서 (클래스, vector 사용법까지) (1) | 2019.11.22 |
[C++] map, set의 키를 클래스 구조체로 만드는 방법 (5) | 2019.11.20 |
[C++] 파일입출력(ofstream, ifstream)에 대해서. (2) | 2019.11.18 |
[C++] reverse 문자열을 거꾸로 하는 함수에 대해서 (0) | 2019.11.13 |