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, " "));