| Home | Libraries | People | FAQ | More

#### The Shared Container Iterator Object Generator

    template <typename Container>
    shared_container_iterator<Container>
    make_shared_container_iterator(Container::iterator base,
                                   boost::shared_ptr<Container> const& container)

This function provides an alternative to directly constructing a `shared_container_iterator`. Using the object generator, a `shared_container_iterator` can be created and passed to a function without explicitly specifying its type.

### Example

This example, similar to the previous, uses `make_shared_container_iterator()` to create the iterators.

`shared_iterator_example2.cpp`:

    #include "shared_container_iterator.hpp"
    #include "boost/shared_ptr.hpp"
    #include <algorithm>
    #include <iterator>
    #include <iostream>
    #include <vector>

    template <typename Iterator>
    void print_range_nl (Iterator begin, Iterator end) {
      typedef typename std::iterator_traits<Iterator>::value_type val;
      std::copy(begin,end,std::ostream_iterator<val>(std::cout,","));
      std::cout.put('\n');
    }

    int main() {

      typedef boost::shared_ptr< std::vector<int> > ints_t;
      {
        ints_t ints(new std::vector<int>());

        ints->push_back(0);
        ints->push_back(1);
        ints->push_back(2);
        ints->push_back(3);
        ints->push_back(4);
        ints->push_back(5);

        print_range_nl(boost::make_shared_container_iterator(ints->begin(),ints),
                       boost::make_shared_container_iterator(ints->end(),ints));
      }

      return 0;
    }

Observe that the `shared_container_iterator` type is never explicitly named. The output from this example is the same as the previous.