개발 Study

#38. 조건자

HYuk 2021. 5. 23. 18:12
728x90

#알고리즘

-> 알고리즘을 사용하여 오름차순, 내림차순 등을 할 수 있다.

알고리즘을 사용하려면 #include <algorithm>을 추가해야한다.

 

1. 정렬 sort

sort(시작위치, 마지막원소 다음 위치, 조건자)

=> sort(vecInt.begin(), vecInt.end(), Less<int>);

이와 같이 알고리즘을 사용할 때 조건자를 사용하게 되는데 조건자는 다음과 같이 만든다.

 

#조건자

-> bool 타입의 값을 반환하는 함수 포인터, 함수 객체로 만든 것이다.

전역에 조건을 설정해주면 된다.

 

template <typename T>
bool Less(T& _a, T& _b)
{
return _a < _b;
}

 

2. 조건에 맞는 개수 세기 count_if

count_if(시작위치, 마지막원소 다음 위치, 조건자)

=> count_if(vecInt.begin(), vecInt.end(), OddCnt<int>);

조건자가 true일때의 개수를 반환함

 

# 조건자

template <typename T>
bool OddCnt(T& _Num)
{
return (_Num % 2) != 0;
}

 

 

 

 

3. 모든 배열에 조건자 수행하기 for_each

for_each(시작위치, 마지막원소 다음 위치, 조건자)

vecInt가 포인터 형(vector<int*> vecInt;)일때, vecInt를 초기화 해주려면

ex)

for(int i=0; i<10; ++i)

{

delete vecInt[i];

vecInt[i] = nullptr;

}

을 해주어야 하는데 불편하다 따라서 다음과 같이 초기화 해주면 편하다.

 

=> for_each(vecInt.begin(), vecInt.end(), Delete<int*>)

 

조건

template <typename T>
void Delete(T& _In)
{
if (_In)
{
delete _In;
_In= nullptr;
}
}

728x90

'개발 Study' 카테고리의 다른 글

#40. Map  (0) 2021.05.26
#39. List  (0) 2021.05.24
#37. Vector  (0) 2021.05.23
#36. STL (Standard Template Library) 정의  (0) 2021.05.22
#35. 클래스 템플릿  (0) 2021.05.21