벡터(vector)나 배열 등에 저장된 원소들 중에 최대값과 최소값을 찾아야 하는 경우가 있습니다.
C++에서 제공하는 max_element와 min_element는 각각 최대값과 최소값을 찾을 수 있습니다.
max_element와 min_element를 사용하는 방법을 알아보겠습니다.
max_element와 min_element는 algorithm 헤더에 포함되어 있습니다.
최대값과 최소값을 가져오는 예제는 다음과 같습니다.
첫 번째 최대값과 최소값을 가져오는 부분은 배열에서 가져오는 방법입니다.
배열의 첫 번째 값의 주소(변수명)과 마지막 값의 주소 + 1(변수명 + sizeof(변수명) / sizeof(타입))을 전달하면 됩니다.
기본적으로 max_element와 min_element는 이터레이터(Iterator)를 리턴합니다.
그래서 값을 읽을 때는 *연산자로 접근해야 읽을 수 있습니다.
다음으로 벡터(vector)를 통해 최대값과 최소값을 가져올 때는 begin()과 end()를 전달해주면 됩니다.
다른 algorithm의 함수들과 마찬가지로 람다 함수를 통해 임의로 동작할 수 있게 할 수 있습니다.
begin(), end() 다음에 람다 함수를 전달할 수 있습니다.
string 타입을 받아서 int로 변환한 이후에 비교하는 간단한 람다식은 다음과 같습니다.
[](std::string lhs, std::string rhs) { return std::stoi(lhs) < std::stoi(rhs); }
람다를 활용하면 본인이 원하는 임의의 동작으로 최대값과 최소값을 얻을 수 있습니다.
마지막으로 max_element와 min_element가 빈 컨테이너를 전달받는 경우에 대한 처리가 필요합니다.
두 함수 모두 변수명.end()로 전달하는 값을 리턴해서 빈 컨테이너라는 것을 알 수 있게 해줍니다.
그래서 다음과 같은 if문을 추가해주면 됩니다.
auto minVal = std::min_element(vecEmpty.cbegin(), vecEmpty.cend());
if (minVal == vecEmpty.cend()) {
// do something
}
간단하게 빈 컨테이너가 전달됐을 경우의 예외를 처리해줄 수 있습니다.
배열, vector, 람다 함수를 통한 결과 모두 동일하게 표시가 되는 것을 확인할 수 있습니다.
C++의 max_element와 min_element를 사용하면 쉽게 최소값과 최대값을 찾아낼 수 있습니다.
'Programming > C&CPP' 카테고리의 다른 글
C++ 소수점 올림/반올림/내림 방법 (0) | 2021.02.04 |
---|---|
C++ string (문자열) 소문자, 대문자 변환 (0) | 2020.11.06 |
C++ string을 int로 변경하는 방법 (0) | 2019.11.18 |
C++ int를 string으로 변경하는 방법 (0) | 2019.11.15 |
C++ std::string 토큰(Token) 분리 방법(Tokenize) (0) | 2018.11.22 |