Listing 6

struct is_positive_number { bool operator()(int x) { return 0 < x; } };

std::vector<int> numbers;
// ...
// Using filter_iterator
// Print all positive numbers
     std::copy(make_filter_iterator<is_positive_number>(numbers.begin(), 
     numbers.end() ), make_filter_iterator<is_positive_number>(numbers.end(), 
     numbers.end() ), std::ostream_iterator<int>(std::cout, " "));
// copy those elements that are bigger than -2
std::copy( make_filter_iterator( 
     std::bind2nd(std::greater<int>(), -2), numbers.begin(), numbers.end() ),
     make_filter_iterator(std::bind2nd(std::greater<int>(), -2), 
     numbers.end(),numbers.end()),std::ostream_iterator<int>(std::cout," "));
// Using filtered adaptor
rng::copy( filtered(numbers, is_positive_number()), 
           std::ostream_iterator<int>(std::cout, " "));
rng::copy( filtered(numbers, std::bind2nd(std::greater<int>(), -2)), 
           std::ostream_iterator<int>(std::cout, " "));