입력 반복자인 first부터 last직전까지의 시퀀스의 모든 요소를 fn의 인수로 전달합니다. 단순히 반복하는 역할만 할 뿐이며, 실질적으로 요소에 대한 처리(이를테면 출력)를(을) 하진 않습니다. (할 수도 없겠지만요.)
세 번째 인수 fn의 경우 몇 가지 제약사항이 따릅니다. 함수포인터의 경우 전달인수의 갯수는 하나이며, 타입은 (당연히) 시퀀스의 각 요소를 전달받을 수 있는 타입이어야 합니다. 함수의 리턴은 해도 좋고 안해도 좋으나 별 의미가 없습니다. 이 리턴값이 반복자를 이용한 루프에 아무런 영향을 끼치지 않기 때문입니다. 이왕이면 리턴을 하지 않는 형식이 좋을 듯 싶습니다. 리턴을 한다면 리턴값에 의미를 부여할테고, 소용없는 리턴값에 의미를 부여하는 것은 적절치 않아 보입니다. 그리고 함수 객체를 넘길 수도 있습니다. 역시 위와 같은 제약사항이 따르며, 외부에서 접근 가능하도록 접근 범위를 public으로 설정하여야 합니다.
예제1 – 함수 포인터를 전달
#include <iostream> #include <algorithm> using namespace std;
함수 객체를 사용하면 함수 뿐만 아니라 여러 객체들과 함수를 같이 전달할 수 있어서 여러모로 좋습니다. 단, 함수 객체를 전달할 때에는 레퍼런스 형식으로 전달(call by reference)하는 것이 아니라 객체를 복사하여 전달(call by value)합니다. 이 때문에 객체의 멤버의 값이 중간에 바뀌는 경우가 발생하고, 이를 반드시 잡아야 한다면 함수의 리턴 값을 보관해 두어야 합니다. 위 예제에서는 result객체에 저장해 두었습니다.