typename Iter::difference_type distance(const Iter& x, const Iter& y) const { return y.base().first - x.base().first; }
void advance(Iter& p, D n) { p.base().first += n; p.base().second += n; }
bool less(const Iter& x, const Iter& y) const { return x.base().first < y.base().first; }
void decrement(Iter& i) { --i.base().first; --i.base().second; }
void increment(Iter& i) { ++i.base().first; ++i.base().second; }
bool equal(const Iter& p1, const Iter& p2) const { return p1.base().first == p2.base().first; }
void swap_elements( Iter first, Iter second, boost::ptr_vector<T,C,A>& vec) { std::swap( *first.base(), *second.base()); }