-
[c++] std::max_element , std::min_element 함수Programming/c++ 2022. 9. 16. 20:11728x90
std::max_element , std::min_element
max_element(), min_element()는 둘다 모든 요소에 접근을 해야 하기 때문에, 모든 STL 컨테이너에 대해서 선형으로 동작한다. 즉, 시간 복잡도가 O(n)이다.
std::max_element , std::min_element 함수 정의
// MAX template <class ForwardIterator> ForwardIterator max_element (ForwardIterator first, ForwardIterator last); template <class ForwardIterator, class Compare> ForwardIterator max_element (ForwardIterator first, ForwardIterator last, Compare comp); //MIN template <class ForwardIterator> ForwardIterator min_element (ForwardIterator first, ForwardIterator last); template <class ForwardIterator, class Compare> ForwardIterator min_element (ForwardIterator first, ForwardIterator last, Compare comp);
max_element, min_element 리턴 값은 iterator 이다.
std::max_element , std::min_element 예제
#include <iostream> #include <algorithm> #include <vector> #include <list> int main() { int arr[] = { 1, -2, 0, 9, -1, 2, -10 }; std::vector<int> vec = { 1, -2, 0, 9, -1, 2, -10 }; std::list<int> nlist = { 1, -2, 0, 9, -1, 2, -10 }; auto arr_iter1 = std::min_element(arr, arr + 7); //-10 auto arr_iter2 = std::max_element(arr, arr + 7); //9 auto vec_iter1 = std::min_element(vec.begin(), vec.end()); //-10 auto vec_iter2 = std::max_element(vec.begin(), vec.end()); //9 auto list_iter1 = std::min_element(nlist.begin(), nlist.end()); //-10 auto list_iter2 = std::max_element(nlist.begin(), nlist.end()); //9 return 0; }
std::max_element , std::min_element 활용 ( 절댓값 )
min_element, max_element 의 3번째 argument 로 조건 함수를 쓸 수 있다.
벡터 원소들의 절댓값으로 min, max값인 원소의 주소를 반환한다.
<사용 조건>
- comp 함수는 bool타입 함수로, 인수를 수정하면 안된다.
- 함수 포인터 이거나 함수 객체를 매개변수로 사용 가능하다.
- 첫번째 인수가, 두번째 인수보다 작은지 판단하는 알고리즘으로 작성해야한다.
comp를 제공하는 함수는 위의 기본적인 틀에 따라, 참과 거짓을 나타내는 custom된 함수를 만들어 사용할 수 있다.
#include <iostream> #include <algorithm> bool comp(int i, int j) { return(std::abs(i) < std::abs(j)); } int main() { std::vector<int> vec = { 1, -2, 0, 9, -1, 2, -10 }; auto iter_min = std::min_element(vec.begin(), vec.end(), comp); //0 auto iter_max = std::max_element(vec.begin(), vec.end(), comp); //-10 return 0; }
728x90'Programming > c++' 카테고리의 다른 글
[c++] prev_permutation, next_permutation (0) 2022.09.28 [c++] smart pointer (unique_ptr, shared_ptr, weak_ptr) (0) 2022.09.22 [c++] lower_bound, upper_bound 함수 (0) 2022.09.15 [c++] unique 함수 (0) 2022.08.01 [c++] std::accumulate 함수 vector sum (0) 2022.07.16