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

[C++] 최초값, 최대값 함수 min, max 에 대해서 (클래스, vector 사용법까지)

BlockDMask 2019. 11. 22. 03:30
반응형

여러분 펭하펭하. 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(12<< endl;
    cout << "min(2, 2)       : " << min(12<< endl;
    cout << "min('b', 'd')   : " << min('b''d'<< endl;
    cout << "min(34.5, 12.3) : " << min(34.512.3<< endl << endl;
    
    cout << "max(1, 2)       : " << max(12<< endl;
    cout << "max(2, 2)       : " << max(12<< endl;
    cout << "max('b', 'd')   : " << max('b''d'<< endl;
    cout << "max(34.5, 12.3) : " << max(34.512.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(104);
    Animal cat2(204);
    Animal chicken1(152);
    Animal chicken2(202);
 
    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 = { 1091254758 };
    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 함수도 존재합니다. [바로가기]

반응형