# Boost.Range

## Range Adaptors

#### `adjacent_filtered`

>                 rng | boost::adaptors::adjacent_filtered( bi_pred )

>                 boost::make_adjacent_filtered_range( rng, bi_pred )

- Precondition: The value-type of the range is convertible to both argument types of `bi_pred`.
- Postcondition: For all adjacent elements `[x,y]` in the returned range, `bi_pred(x,y)` is `true`.
- Throws: Whatever the copy-constructor of bi_pred might throw.
- Range Category: SinglePassRange

### Example

            #include <boost/range/adaptor/adjacent_filtered.hpp>
            #include <boost/range/algorithm/copy.hpp>
            #include <boost/assign.hpp>
            #include <algorithm>
            #include <functional>
            #include <iostream>
            #include <vector>

            int main(int argc, const char* argv[])
            {
                using namespace boost::assign;
                using namespace boost::adaptors;

                std::vector<int> input;
                input += 1,1,2,2,2,3,4,5,6;

                boost::copy(
                    input | adjacent_filtered(std::not_equal_to<int>()),
                    std::ostream_iterator<int>(std::cout, ","));

                return 0;
            }

This would produce the output:
`1,2,3,4,5,6`

(C) Copyright Neil Groves 2009 (C) Copyright Thorsten Ottosen 2003-2004