ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [c++] std::max_element , std::min_element 함수
    Programming/c++ 2022. 9. 16. 20:11
    728x90

    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

    댓글

© 2022. code-space ALL RIGHTS RESERVED.