Re: [hub] on the specialized iteration over elements

Andrzej Krzemienski via Boost <[email protected]>
Newsgroups gmane.comp.lib.boost.devel
Message-ID <CAOenAXhnk575b9QduPkXNnEybzNb0G9s87CmPatZYqagw55mUw@mail.gmail.com>
On Fri, Apr 17, 2026, 09:43 Joaquin M López Muñoz <
[email protected]> wrote:

> El 16/04/2026 a las 21:42, Andrzej Krzemienski escribió:
> > Hi Everyone,
> > Once again, thank you Joaquín for this contribution to the community.
> >
> > This is not really a review, but I wanted to talk about this idea to
> > implement a specialized algorithm for iterating over the container
> > elements in the form of hub::visit.
> >
> > First, should we draw from this a more general observation that
> > iterators are an abstraction with overhead, and other containers
> > (deque?) would also benefit from this inversion-of-control approach?
>
>
> Ion has aready followed up on this subtopic, I'll add my observations on
> that subthread.
>
>
> >
> > Second, I think that the most natural naming choice for this operation
> > is "for each", not "visit". It does practically the same thing as
> > `std::for_each`.
> >
> > Third, the interface is rather unusual, and it allows one hub to
> > iterate over another hub's elements:
> >
> > hub<T> h, g;
> > h.visit(g.begin(), g.end(), fun);
> >
> > https://godbolt.org/z/bbb765bb1
> >
> > It looks like this function should be a free function rather than a
> > member function. And if there is a reason to make it a member
> > function, at minimum add a precondition that both the iterators should
> > point inside the container.
>
>
> Yes, I think your proposal makes sense, since, as you CE snippet shows,
> the operation can be performed based on the iterators alone.
>
> So, instead of visit and visit_all we can have global functions:
>
>    template<hub_iterator Iterator, typename F>
>    Iterator for_each(Iterator first, Iterator last, F f);
>
>    template<typename T, typename Allocator, typename F>
>    typename hub<T, Allocator>::iterator for_each(hub<T, Allocator>& x, F f)
>    {
>      return for_each(x.begin(), x.end(), std:.ref(f));
>    }
>
>    // same for const hub
>
> I have a bikeshedding problem with visit_while/visit_all_while, though:
> the morally closest function in <algorithm> would be std::find_if_not,
> which is not a very intuitive equivalent and has, in fact, different
> semantics (predicates can't change the passed element). Ideas on naming?
> for_each_while would be my first option, I guess.
>

A very good and descrptive name, IMO.

Regards,
&rzej;

>
> Joaquín M López Muñoz
>
>
_______________________________________________
Boost mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://lists.boost.org/mailman3/lists/boost.lists.boost.org/
Archived at: https://lists.boost.org/archives/list/[email protected]/message/HX5AZTLLQCGIEFKQKMT6K2XT376CP7I5/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.