Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2006-09-18 13:27:35


Alexander Shyrokov <shirokov_at_[hidden]> writes:

> An iterator is pointing to a pointer, how do I add another dereferencing
> operator in the algorithm, so it works on values?

You might try
http://www.boost.org/libs/iterator/indirect_iterator.html

> void f(int& i);
> vector<int*> a;
> // this would work if f would be void f(int* i)
> for_each(a.begin(),a.end(),boost::bind(f,_1));
>
> I could define a dereferencing predicate:
> template<class T>
> struct deref{
> typedef T result_type;
> T operator()(T* p){assert(p);return *p;}
> };
> for_each(a.begin(),a.end(),boost::bind(f,boost::bind(deref<int>,_1)));

  std::for_each(
      boost::make_indirect_iterator(a.begin())
    , boost::make_indirect_iterator(a.end())
    , some_operation
  );

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net