std::max_element, std::min_element, std::minmax_element
#include<algorithm> 을 필요로 한다.
일반적으로 max(a,b) min(a,b)는 2개의 대해서만 최대 최소를 반환하지만
아래는 컨테이너에서 최대 최소를 반환한다.
최대 최소를 구하는 것들이다.
예를 들어 이렇게 쓸 수 있다.
min만 원하면 min만 쓰고 max만 원하면 max만 쓰면 된다.
아래 예시는 최대값이다.
기본 형태
이 아래 2가지가 제일 많이 쓰일 듯 하다.
max_element( ForwardIt first, ForwardIt last );
max_element( ForwardIt first, ForwardIt last, Compare comp );
++여기서 fitst는 닫힌 구간이고 last는 열린 구간이다.
-> [1, 9)인 정수면 1,2,3,4,5,6,7,8 이란 뜻이다.
** 벡터의 end()는 마지막 원소 뒷부분을 가리키기 때문에 벡터의 모든 원소가 포함될 수 있는 것이다.
Parameter
대표적으로 3가지 first, last, comp가 보인다.
first, last는 iterator로 범위를 제한을 하고
comp는 bool function이 대부분이다.
true인 값이라는 조건을 다는 것이다.
**이것은 활용도가 높기에 익혀둘 필요가 있을 것 같다.
#include <algorithm>
#include <iostream>
#include <vector>
#include <cmath>
static bool abs_compare(int a, int b)
{
return (std::abs(a) < std::abs(b));
}
int main()
{
std::vector<int> v{ 3, 1, -14, 1, 5, 9 };
std::vector<int>::iterator result;
result = std::max_element(v.begin(), v.end());
std::cout << "max element at: " << std::distance(v.begin(), result) << '\n';
result = std::max_element(v.begin(), v.end(), abs_compare);
std::cout << "max element (absolute) at: " << std::distance(v.begin(), result) << '\n';
}
max element at: 5
max element (absolute) at: 2
return 값으로 Iterator를 반환한다.
-> 값을 원한다면 포인터 변수가 가리키는 값을 추출할 때 쓰는 *이 필요하다
**똑같은 것이 있으면 먼저 나온 것의 위치를 반환
**비어있는 범위면 last를 반환
배열 또한 마찬가지이다. 값을 원한다면 *이 필요하다.
int result = *max_element(arr , arr + 10000);
위와 같이 pointer의 값을 반환해야하기에 저런 식으로 써야한다.
'문제풀이(Problem Solving) > C++ 문제풀이에 유용한 것들' 카테고리의 다른 글
C++에서의 따옴표 (0) | 2021.06.07 |
---|---|
입출력이 많음으로 인해 시간초과나는 것 해결 (0) | 2021.06.07 |
vector에서 iterator 활용, 벡터 역순 (0) | 2021.06.07 |
문자열 <- >정수 변환 string to int, int to string (0) | 2021.06.07 |
STL 벡터, vector 사용법 [C++] (0) | 2021.05.22 |