■ 자주사용하는 C++ STL algorithm 함수 정리
• 아래와 같은 배열과 함수가 먼저 선언되어 있다고 가정한다
int arr[10] = { 3, 7, 4, 3, 5, 1, 9, 5, 6, 4 }; void PRINT_ARR( int arr[], int size ) { for( int i = 0; i <size; i++ ) cout << arr[i] << ' '; cout << endl; } |
[주의] C/C++뿐만 아니라 STL에서도 end는 마지막 원소가 아니라 마지막 원소의 다음이다. 그러므로 시작주소(이하 begin)는 arr 또는 &arr[0]이지만 종료주소(이하 end)는 arr + 10 이나 &arr[10]가 된다.
♧ 배열에서 해당 원소의 수 세기
cout << count( arr, arr + 10, 5 ) << end; PRINT_ARR( arr, 10 ); |
|
> 2
♧ 배열에서 원소 찾기
원소가 나오는 첫 번째 주소 값을 반환한다. 찾는 원소가 없을 경우 end(가장 마지막 원소 다음 주소값)를 반환한다.
cout << find( arr, arr + 10, 4 ) << endl; cout << find( arr, arr + 10, 4 ) - arr << endl; cout << find( arr, arr + 10, 2 ) - arr << endl; if( find( arr, arr + 10, 0 ) != arr + 10 ) cout << "FOUND" <<endl; else cout << "NOT FOUNT" <<endl; |
|
> 0012FF80
> 2
> 10
> FOUND
♧ 정렬
sort( arr, arr + 10 ); PRINT_ARR( arr, 10 ); |
|
> 1 3 3 4 4 5 5 6 7 9
♧ 최소값 찾기 (위 배열을 그대로 사용한다)
cout << min_element( arr, arr + 10 ) <<endl; |
|
> 1
♧ 최대값 찾기 (위 배열을 그대로 사용한다)
cout << max_element( arr, arr + 10 ) <<endl; |
|
> 9
♧ 배열 뒤집기 (위 배열을 그대로 사용한다)
reverse( arr, arr + 10 ); PRINT_ARR( arr, 10 ); |
|
> 9 7 6 5 5 4 4 3 3 1
♧ 원소 위치 바꾸기 (위 배열을 그대로 사용한다)
swap( arr[0], arr[5] ); PRINT_ARR( arr, 10 ); |
|
> 4 7 6 5 5 9 4 3 3 1
■ 정렬이 되어 있어야 하는 알고리즘 함수들
♧ 중복원소 제거 (위의 배열을 그대로 사용한다)
unique( arr, arr + 10 ); PRINT_ARR( arr, 10 ); sort( arr, arr + 10 ); PRINT_ARR( arr, 10 ); unique( arr, arr + 10 ); PRINT_ARR( arr, 10 ); |
|
> 4 7 6 5 9 4 3 1 3 1 > 1 3 3 4 4 5 5 6 7 9 > 1 3 4 5 6 7 9 6 7 9 |
|
※ 첫번째 결과처럼 unique는 정렬되지 않은 함수에서 사용할 경우 올바른 결과를 내지 못한다. 아래 함수들도 역시 먼저 정렬이 되어야 한다.
♧ 집합 연산
int set_a[4] = { 1, 3, 5, 7 }; int set_b[4] = { 2, 4, 5, 7 }; int set_c[10];
// 배열의 모든 원소의 값을 0으로 채운다. fill( set_c, set_c + 10, 0 );
// 교집합 set_intersection( set_a, set_a + 4, set_b, set_b + 4, set_c ); PRINT_ARR( set_c, 10 );
// 차집합 set_difference( set_a, set_a + 4, set_b, set_b + 4, set_c ); PRINT_ARR( set_c, 10 );
// 합집합 set_union( set_a, set_a + 4, set_b, set_b + 4, set_c ); PRINT_ARR( set_c, 10 ); |
|
> 5 7 0 0 0 0 0 0 0 0
> 1 3 0 0 0 0 0 0 0 0
> 1 2 3 4 5 7 0 0 0 0 |
|
♧ 여러개의 원소가 존재하는지 판단
int set_a[7] = { 1, 3, 5, 7, 10, 23, 50 }; int set_b[2] = { 5, 23 }; if( includes( set_a, set_a + 7, set_b, set_b + 2 ) ) cout << "모든 원소가 포함" <<endl; |
|
> 모든 원소가 포함 |
|
'컴퓨터공학 기초 > C.C++' 카테고리의 다른 글
STL - 이터레이터(iterator) (0) | 2011.09.16 |
---|---|
STL - vector와 관련 함수 (0) | 2011.09.16 |
[DLL] DLL 만드는 방법 2 (0) | 2011.09.08 |
[DLL] DLL 만드는 방법 1 (0) | 2011.09.08 |
cout 출력 포맷 설정하기 (0) | 2011.07.28 |