티스토리 뷰

반응형

C++에서 많은 사람들이 최솟값, 최댓값을 찾을 때 min, max를 쓸때 다음과 같이 쓰는 모습을 너무나도 많이 봤다.

 

1
2
int min_value = min(min(a, b), c);
int max_value = max(max(a, b), c);
cs

 

위에 코드같이 세 개의 값에 대해서만 min, max를 구한다면 그래도 불편을 감수하고 사용할 수 있다. 그런데, 만약 4개, 5개 등등... 굉장히 많은 수들의 최댓값, 최솟값을 비교해야 한다면?

 

값들이 배열이나 container안에 있으면 함수(max_element / min_element)를 통해 구할 수 있지만, 만약 각각의 값들이 다른 공간안에 담겨있다면 조금 곤란할 수 있다.

 

C++ 11부터는 다음과 같이 min과 max를 구할 수 있다. 네 개의 값 a, b, c, d의 값 중 최솟값과 최댓값을 찾는다고 하면 코드를 이렇게 작성할 수 있다.

 

1
2
int min_value = min({a, b, c, d}); // min value of a, b, c, d
int max_value = max({a, b, c, d}); // max value of a, b, c, d
cs

 

왜 이런 일이 가능할까?

 

C++ 11 에서는 min함수 템플릿에 세 번째 항목이 추가되었다.

 

(3) initializer list - T min(initializer_list<T> il, Compare comp);

 

첫 번째 인자로 initilizer_list가 왔는데, 이는 initializer_list 객체의 생성자로 인하여 자동으로 임시 list를 짓는 역할을 한다고 생각하면 된다. 

 

위의 예시를 기준으로, a, b, c, d 네 개의 변수를 하나의 list il = {a, b, c, d} 를 임시로 생성하여 안의 값들을 비교하는 것이다.

 

비교 기준은 두 번째 인자인 Compare comp에 넣어주면 된다.

 

max함수도 min 함수와 같은 방법으로 동작하기에 설명을 생략하겠다.

 

도움이 되었다면 지나가는 길에 하트 하나 눌러주세요, 양질의 글을 쓰는데 하나의 동기부여가 됩니다😍

지적이나 오타 수정 댓글 환영합니다!!

반응형
댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
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
글 보관함