본문 바로가기

C++

C++ STL(알고리즘)

알고리즘 이란?

전역함 수로 선언된 컨테이너들의 작업을 도와주는 여러 가지 기능들이 정의되어 있는 라이브러리이다.

 

정렬알고리즘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
template<typename T>
bool Less(T _Dst, T _Src)
{
    return _Dst < _Src;
}
 
void main()
{
    vector<int> vecint;
    vecint.reserve(4);
    vecint.push_back(20);
    vecint.push_back(40);
    vecint.push_back(10);
    vecint.push_back(30);
    
    sort(vecint.begin(), vecint.end(), Less<int>);
 
    for (vector<int>::iterator iter = vecint.begin(); iter != vecint.end(); iter++)
    {
        cout << *iter << endl;
    }
}
cs

1,5 행 : 내림차순을 하는 알고리즘을 정의
16행 : 정렬 알고리즘을 수행 시작 위치, 끝 위치, 알고리즘을 매개변수로 반환받는다.

정렬 알고리즘은 배열 기반의 컨테이너만 사용 가능하다.

 

표준 알고리즘

알고리즘을 사용하기 위해서 Less를 만드는 건 상당히 불편하다.
그렇기 때문에 c++은 기본 알고리즘 함수가 정의되어 있다.
#include <functional>을 가져와야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
void main()
{
    vector<int> vecint;
    vecint.reserve(4);
    vecint.push_back(20);
    vecint.push_back(40);
    vecint.push_back(10);
    vecint.push_back(30);
    
    sort(vecint.begin(), vecint.end(), less<int>());
 
    for (vector<int>::iterator iter = vecint.begin(); iter != vecint.end(); iter++)
    {
        cout << *iter << endl;
    }
}
cs

10행 : less<int>()는 사용자가 정의한 게 아닌 functional에 있는 함수이다.
해당 함수를 사용할 때에는 항상 함수 객체로 만들어 사용해야 한다.

 

알고리즘의 종류는 정렬뿐만 아니라 count_if, for_each 등 여러 가지 존재한다.

'C++' 카테고리의 다른 글

C++ 콜백함수  (0) 2020.12.27
C++ STL(Map)  (0) 2020.10.06
C++ STL(반복자 iterator)  (0) 2020.09.28
C++ STL(Vector)  (0) 2020.09.28
C++ 템플릿(template)  (0) 2020.09.24