# Boost.Range

## Range Adaptors

#### `indexed`

>     rng | boost::adaptors::indexed

>     boost::make_indexed_range( rng )

- Returns: A range adapted to return both the element and the associated index. The returned range consists of iterators that have in addition to the usual iterator member functions an `index()` member function that returns the appropriate index for the element in the sequence corresponding with the iterator.
- Range Category: SinglePassRange

### Example

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

            template<class Iterator>
            void display_element_and_index(Iterator first, Iterator last)
            {
                for (Iterator it = first; it != last; ++it)
                {
                    std::cout << "Element = " << *it
                              << " Index = " << it.index() << std::endl;
                }
            }

            template<class SinglePassRange>
            void display_element_and_index(const SinglePassRange& rng)
            {
                display_element_and_index(boost::begin(rng), boost::end(rng));
            }

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

                std::vector<int> input;
                input += 10,20,30,40,50,60,70,80,90;

                display_element_and_index( input | indexed(0) );

                return 0;
            }

This produces the output:
`Element = 10 Index = 0
Element = 20 Index = 1
Element = 30 Index = 2
Element = 40 Index = 3
Element = 50 Index = 4
Element = 60 Index = 5
Element = 70 Index = 6
Element = 80 Index = 7
Element = 90 Index = 8
`

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