레필리아
자주 사용하는 C++ STL algorithm 함수 정리
레필리아
레필리아의 잡동사니
레필리아
전체
오늘
어제
  • 전체보기 (151)
    • 개발 공간 (1)
      • 매크로 (1)
    • 컴퓨터공학 리서치 (23)
      • 공개 (23)
      • 비공개 (0)
    • 컴퓨터공학 기초 (70)
      • Computer architectur.. (0)
      • Embedded system (6)
      • Operating system (0)
      • Database (2)
      • C.C++ (32)
      • Network (0)
      • Java (12)
      • 문제 풀이 (18)
    • 창고 (57)
      • 미분류 (57)
      • 유틸리티 (0)
      • 쓰레기통 (0)
      • ESLAB (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • MSP430F5437

최근 댓글

최근 글

hELLO · Designed By 정상우.
컴퓨터공학 기초/C.C++

자주 사용하는 C++ STL algorithm 함수 정리

2011. 9. 16. 13:09


■ 자주사용하는 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
'컴퓨터공학 기초/C.C++' 카테고리의 다른 글
  • STL - 이터레이터(iterator)
  • STL - vector와 관련 함수
  • [DLL] DLL 만드는 방법 2
  • [DLL] DLL 만드는 방법 1
레필리아
레필리아
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.