accumulate()의 네 번째 인수는 구간에 적용할 이항 연산자로 여기서는 람다 표현식을 썼다. 이항 함수는 accumulate() 함수의 세 번째 인수를 이항 함수의 첫 번째 인수로 받는다. 범위에 있는 반복자를 역참조한 결과를 이항 함수의 두 번째 인수로 전달한다. 따라서 람다 표현식의 첫 번째 매개변수는 세 번째 인수의 타입으로 지정하고, 두 번째 매개변수는 범위에 있는 반복자가 가리키는 원소의 타입이어야 한다. str에 저장된 결과는 문자열 "one two three four"가 된다.
조건자를 적용할 수 있는 컨테이너의 함수 멤버도 원소가 포인터라는 것을 이용해야 한다. list와 forward_list 컨테이너의 remove_if() 함수도 한 예일 것이다.
std::list<word_ptr> wrds {std::make_shared<string>("one"), std::make_shared<string>("two"), std::make_shared<string>("three"), std::make_shared<string>("four")}; wrds.remove_if([](const word_ptr& pw){ return (*pw)[0] == 't'; });
remove_if()에 전달된 람다 표현식은 문자열의 첫 번째 문자가 't'이면 true를 반환한다. 이렇게 하면 리스트에서 "two"와 "three"가 제거된다. 람다 표현식의 인수는 string 객체에 대한 스마트 포인터이므로 문자열에 접근하려면 역참조를 먼저 해야 한다.