본문 바로가기

함수 어댑터(function adaptor) 지금까지 살펴본 제네릭 STL 알고리즘들 중 자신의 수행 방식을 조정하기 위해서 함수 객체를 인자로 사용하는 알고리즘이 꽤 많았다. 함수 객체와 반복자는 둘 다 알고리즘 어댑터로써의 역할을 수행한다. 반복자 어댑터가 제네릭 알고리즘에 사용할 수 있는 반복자들을 좀 더 다양하게 만들어 주듯이, 함수 어댑터(function adaptor)를 이용하면 더 다양한 함수 객체를 만들어낼 수 있다. 아무래도 함수 어댑터를 사용하는 것이 구조체나 클래스를 정의하여 새로운 함수 객체 타입을 직접 만드는 것보다는 훨씬 쉽다. STL에서는 세 가지 부류의 함수 어댑터 즉, 바인더(binder), 부정자(negator), 함수 포인터 어댑터(adaptor for pointers to functions)가 제공된다. 이 어댑.. 더보기
반복자 어댑터(iterator adaptor) 반복자 어댑터(iterator adaptor)는 반복자 컴포넌트의 인터페이스를 변경하기 위해 사용하는 STL 컴포넌트이다. STL에서 제공하는 반복자 어댑터에는 역 반복자 어댑터(reverse iterator adaptor) 밖에 없다. 양방향 반복자나 임의 접근 반복자에 이 어댑터를 적용하면, 순회 방향이 반대인 반복자를 얻을 수 있다. 이렇게 변환된 반복자의 인터페이스는 원래의 것과 동일하다. 역 반복자 어댑터는 템플릿 클래스로 정의되며, 이 때 템플릿 인자는 반복자의 타입을 사용한다. 역 반복자 어댑터를 직접 사용하는 경우는 드물다. 왜냐하면, 모든 STL 컨테이너들이 이미 두 개씩의 역 반복자 타입을 제공하고 있기 때문이다(어댑터를 이용하여 미리 정의해 둔 것이다). 하나는 뮤터블(mutable).. 더보기
컨테이너 어댑터(container adaptor) 어댑터는 다른 STL 컴포넌트의 인터페이스를 변경하고자 할 때 사용하는 STL 컴포넌트이다. 어댑터는 템플릿 클래스로 정의되며, 어댑터를 적용할 컴포넌트의 타입이 템플릿 인자로 사용된다. STL에서 제공하는 어댑터에는 컨테이너 어댑터(container adaptor), 반복자 어댑터(iterator adaptor), 함수 어댑터(function adaptor), 이상 세 가지가 있다. 인터페이스를 변경시켜주는 메커니즘이 과연 어떠한 장점을 지니고 있는지 알아보기 위해, 우선 스택이나 큐와 같은 기본적인 데이터 구조를 제공하는데 있어서 어떠한 문제점이 있는지 살펴보자. 스택(stack)은 vector, list, deque보다 더 간단한 컨테이너이고, 게다가 이 세 종류의 컨테이너에서는 스택에서 필요로 하.. 더보기