Page 138

앞 장에서는 표준 라이브러리에서 제공하는 여러 가지 유용한 제네릭 데이터 구조를 둘러봤다. 다른 라이브러리와 달리 표준 라이브러리는 여기서 더 나가서 거의 모든 컨테이너에 적용할 수 있는 제네릭 알고리즘을 다양하게 제공한다. 이러한 알고리즘을 활용하면 컨테이너에 담긴 원 소를 검색하고, 정렬하고, 가공하고, 다양한 연산을 수행할 수 있다. 표준 라이브러리 알고리즘 의 가장 큰 장점은 각 원소의 타입이나 컨테이너의 타입과는 독립적이라는 점이다. 게다가 모 든 작업을 반복자 인터페이스만으로 처리한다. 표준 라이브러리 알고리즘의 상당수는 콜백 callback 을 받는다. 여기서 콜백이란 함수 포인터나 함수 포인터와 유사한 역할을 하는 것들을 말하는데, 예를 들면 operator ( )를 오버로딩한 객 체와 인라인 람다 표현식이 있다. 그중에서 operator ( )를 오버로딩한 것을 함수 객체 또는 펑 터라 부른다. 표준 라이브러리는 친절하게도 이러한 알고리즘에 사용할 콜백 객체를 생성하기 위한 클래스 를 다양하게 제공한다.

18.1 알고리즘 개요 표준 라이브러리의 알고리즘이 강력한 이유는 컨테이너를 직접 다루지 않고 반복자라는 매개 체로 작동하기 때문이다. 그러므로 컨테이너를 구현한 방식과는 독립적이다. 표준 라이브러리 알고리즘은 모두 함수 템플릿으로 구현됐으며 여기 나온 템플릿 타입 매개변수는 반복자 타입인 경우가 많다. 반복자 자체는 이 함수에 전달된 인수로 결정한다. 함수 템플릿은 대부분 함수에 전달된 인수를 보고 템플릿 타입을 추론하기 때문에 알고리즘을 템플릿이 아닌 일반 함수처럼 호출해서 쓸 수 있다. 반복자 인수는 주로 반복자 범위(시작과 끝의 쌍)로 표현한다. 앞 장에서 설명했듯이 반복자 범위를 표현할 때는 첫 번째 원소는 포함하고 마지막 원소는 제외한 반개방 half-open 범위로 받는 컨테이너가 많다. 끝 반복자 end iterator 는 실제로 ‘마지막 바로 다음’ 항목을 가리킨다. 알고리즘에 전달할 반복자는 일정한 요건을 갖춰야 한다. 예를 들어 copy_backward ( )는 양방 향 반복자를 지정해야 하며, stable_sort ( )는 랜덤 액세스 반복자를 지정해야 한다. 다시 말 해 이런 알고리즘은 요건을 갖추지 못한 반복자를 가진 컨테이너에 대해서는 작동하지 않는다. 예를 들어 forward_list는 정방향 반복자만 제공하고, 양방향이나 랜덤 액세스 반복자는 제공 하지 않는다. 따라서 forward_list를 copy_backward ( )와 stable_sort ( )에 적용할 수 없다.

854 3부 전문가답게 C++ 코딩하기

Profile for 한빛미디어

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

Advertisement