|
Boost Users : |
From: Phil Endecott (spam_from_boost_users_at_[hidden])
Date: 2022-07-05 13:18:40
Hi Dominique,
Dominique Pelle wrote:
> This following program shows many allocations coming
> from boost::split(..., boost::is_any_of(",")):
> When using boost::is_any_of(","), there are 7 dynamic allocations
> per loop iteration whereas when using the lambda predicate,
> there are 0 dynamic allocation per loop as shown below:
See this thread from 2008:
https://lists.boost.org/Archives/boost//2008/02/133396.php
There are some benchmarks in my reply here:
https://lists.boost.org/Archives/boost//2008/02/133415.php
I observed that C's strcspn was one of the better choices,
but it could be beaten for search sets known at compile time
with this:
template <char c0> bool is_any_of(char c) {
return (c==c0);
}
template <char c0, char c1> bool is_any_of(char c) {
return (c==c0) || is_any_of<c1>(c);
}
template <char c0, char c1, char c2> bool is_any_of(char c) {
return (c==c0) || is_any_of<c1,c2>(c);
}
etc.
(Yes, I was writing that before variadic templates!)
I don't know if boost::is_any_of has changed in the 14 years
since then, but your observation suggests not.
Regards, Phil.
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