여러분 펭하펭하. BlockDMask 입니다.
오늘은 C++에서 최소값, 최대값을 구할수 있는 std::min, std::max 함수의 정의에 대해서 알아보고,
1. 기본적인 사용법
2. 클래스를 min max에 넣는 방법
3. vector에서 min, max 구하는 방법까지 알아보려고합니다.
이렇게 3가지 예제를 준비해봤는데요 도움이 될까요?
아 그리고, 최대값과 최소값을 동시에 구할 수 있는 C++ minmax() 함수도 존재합니다.
최대최소값 함수를 동시에 구하는 함수가 궁금하다면? [바로가기]
<목차>
1. C++ std::min 함수, std::max 함수에 대해서.
2. 예제1) C++ 최대값, 최소값 기본 사용법
3. 예제2) min, max 클래스 비교
4. 예제3) C++ min, max vector에서 사용하는 방법
1. C++ std::min 함수, std::max 함수에 대해서.
▶ std::min 함수 원형
헤더 : <algorithm>
template<class T>
const T& min (const T& a, const T& b)
std::min(a,b) - a로 들어온 값과 b로 들어온 값을 비교해서 작은값을 반환 하는 함수 입니다.
**template<class T>에 대한 지식이 부족하다면 [바로가기]에서 공부하고 오시는걸 추천 드립니다.
간단히 말하자면 type T는 모든 타입을 말합니다. int, float, double, string, char, class 등등.
▶ 최소값 min 함수 예제
min(1,2); //1반환
min(2,2); //2반환
min('b', 'd'); //'b' 반환
min(345.678, 123.456); //123.456 반환
▶ std::max 함수 원형
헤더 : <algorithm>
template<class T>
const T& max (const T& a, const T& b)
std::max(a,b) - a,b의 값을 비교해서 큰값을 반환하는 함수 입니다.
▶ 최대값 max 함수 예제
max(1,2); //2 반환
max(2,2); //2 반환
max('b', 'd'); //'d' 반환
max(345.678, 123.456); //345.678 반환
▶ 클래스를 min, max에 인자로 넣는 방법
class Animal 이 있다고 가정을 해봅시다.
Animal cat;
Animal chicken;
min(cat, chicken);
max(cat, chicken);
이론상으로는 Template T 에 들어가기 때문에 최대 최소 함수를 구하는 함수에 인자로 넣을 수 있습니다.
하지만, 인자로 넣기 위해서는 하나가 재정의 되어있어야합니다.
그것은....... 60초 뒤에 공개됩니다.
operator< 입니다. 대소비교를 위한 operator < 가 클래스에 재정의 되어있다면 min, max에 클래스를 집어 넣어서 사용할 수 있습니다.! 관련예제는 아래 작성해 두겠습니다.
2. 예제1 : C++ 최대값, 최소값 기본 사용법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include<iostream> #include<algorithm> using namespace std; int main(void) { cout << "[1] min, max 예제 기본" << endl << endl; cout << "min(1, 2) : " << min(1, 2) << endl; cout << "min(2, 2) : " << min(1, 2) << endl; cout << "min('b', 'd') : " << min('b', 'd') << endl; cout << "min(34.5, 12.3) : " << min(34.5, 12.3) << endl << endl; cout << "max(1, 2) : " << max(1, 2) << endl; cout << "max(2, 2) : " << max(1, 2) << endl; cout << "max('b', 'd') : " << max('b', 'd') << endl; cout << "max(34.5, 12.3) : " << max(34.5, 12.3) << endl; return 0; } | cs |
▶ min, max 예제1 결과
: min에는 작은값이, max에서는 큰 값이 반환되는것을 확인할 수 있습니다.
3. 예제2 : min, max 클래스 비교
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include<iostream> #include<algorithm> using namespace std; class Animal { private: int age; //나이 int legs; //다리 개수 public: Animal(int _age, int _legs) : age(_age), legs(_legs) {}; //생성자 //나이가 적은지 확인하고, //나이가 같다면 다리개수가 적은지 판단. bool operator<(const Animal& _animal) const { if (age != _animal.age) return age < _animal.age; return legs < _animal.legs; } // cout 출력을 위한 "<<" 재정의. friend ostream& operator<<(ostream& _os, const Animal& _animal); }; // cout 출력을 위한 "<<" 재정의. ostream& operator<<(ostream& _os, const Animal& _animal) { _os << _animal.age << '/' << _animal.legs; return _os; } int main(void) { cout << "\n\n[2] 클래스를 이용한 min max" << endl; cout << "고양이와 닭을 비교" << endl << endl; Animal cat1(10, 4); Animal cat2(20, 4); Animal chicken1(15, 2); Animal chicken2(20, 2); cout << "min(cat1(10,4), cat2(20,4)) : " << min(cat1, cat2) << endl; cout << "min(cat1(10,4), chicken1(15,2)) : " << min(cat1, chicken1) << endl; cout << "min(chicken2(20,2), cat1(10,4)) : " << min(chicken2, cat1) << endl; cout << "min(cat2(20,4), chicken2(20,2)) : " << min(cat2, chicken2) << endl << endl; cout << "max(cat1(10,4), cat2(20,4)) : " << max(cat1, cat2) << endl; cout << "max(cat1(10,4), chicken1(15,2)) : " << max(cat1, chicken1) << endl; cout << "max(chicken2(20,2), cat1(10,4)) : " << max(chicken2, cat1) << endl; cout << "max(cat2(20,4), chicken2(20,2)) : " << max(cat2, chicken2) << endl; return 0; } | cs |
▶ C++ 최대값 최소값 예제2 : 클래스 비교 결과
클래스를 min, max 함수에서 이용하기 위해서 "operator<" 를 재정의 하였습니다.
그리고, cout을 이용한 << 출력을 위해서 "operator <<" 를 재정의 하였습니다.
함수를 살펴보면 앞에있는 age를 비교해서 min, max를 결정하고, age가 같다면 legs 개수를 비교하여 min, max를 판단 하는것을 볼 수 있습니다.
4. 예제3 : max, min 벡터에서 사용하는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include<iostream> #include<algorithm> #include<vector> using namespace std; int main(void) { cout << "[3] min max를 이용해서 vector에서 최소 최대값 구하기" << endl; vector<int> v = { 10, 9, 1, 2, 5, 4, 7, 5, 8 }; int len = static_cast<int>(v.size()); //vector의 길이. //min, max를 비교하기 위해 맨 앞 요소 저장. int smallest = v[0]; int largest = v[0]; for (int i = 1; i < len; ++i) { smallest = min(smallest, v[i]); //작은 값을 다시 smallest에 대입 largest = max(largest, v[i]); //큰 값을 다시 largest에 대입 } cout << "vector<int> v = { 10, 9, 1, 2, 5, 4, 7, 5, 8 };" << endl; cout << "smallest : " << smallest << endl; cout << "largest : " << smallest << endl; return 0; } | cs |
▶ C++ min, max 예제3 : vector에서 최대최소 구하기
맨 첫번째 요소 v[0]을 smallest, largest 변수에 대입함으로서, 첫번째 비교숫자를 생성하게 됩니다.
그 후에는 index를 v[0]이 아닌 v[1]부터 쭉 돌면서 하나씩 대소 비교하고, 비교할때마다 작거나 큰 변수를 다시 smallest, largest에 대입하는 방법입니다.
최대값 최소값을 한번에 구할수 있는 minmax 함수도 존재합니다. [바로가기]
'<개인공부> > [C++]' 카테고리의 다른 글
[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++] minmax() 최대값 최소값을 동시에 구하는 함수에 대해서 (0) | 2019.11.25 |
[C++] map, set의 키를 클래스 구조체로 만드는 방법 (5) | 2019.11.20 |
[C++] 파일입출력(ofstream, ifstream)에 대해서. (2) | 2019.11.18 |
[C++] reverse 문자열을 거꾸로 하는 함수에 대해서 (0) | 2019.11.13 |
[C++] string 클래스, 문자열에 대해서 (총정리) (39) | 2019.03.29 |