Opened 21 years ago

Closed 17 years ago

#923 closed Feature Requests (Accepted)

Request extended next() for utility lib

Reported by: nobody Owned by: nobody
Milestone: Component: None
Version: None Severity:
Keywords: Cc:

Description

The standard library's "advance(it, n)" algorithm is
often awkward to use because it takes the "it" argument
by reference.  At times I want to access the n-th
element in a sequence, where I don't know if the
iterator is random-access or not (e.g., a generic
algorithm where the iterator type is only required to
be a model of ForwardIterator) and the O(n) time for
advance with a non-random-access iterator is a
negligible contribution to the overall runtime of the
algorithm.

Using advance, I have to write something like this:

IteratorType it = foo.begin();
advance(it, n);
f(*it);

If the iterator type is complicated, the above is
rather awkward. I would like to instead write

f(*next(it, n));

where the overloaded next() is defined something like
this:

template <typename ForwardIterator, typename Distance>
ForwardIterator next(ForwardIterator it, Distance n) 
{
  advance(it, n);
  return it;
}

Change History (2)

comment:1 by david_abrahams, 19 years ago

Logged In: YES 
user_id=52572

It's a good idea.  I suggest posting code/doc/test patches.  
You should also do the same thing for prior.

comment:2 by biochimia, 17 years ago

Status: assignedclosed
Logged In: YES 
user_id=840777

This feature was committed to CVS on 23-Dec-2003
(boost/next_prior.hpp) and is available since Boost 1.31.

Closing as accepted.
Note: See TracTickets for help on using tickets.