search/search_n vs find/find_if

Chris Jefferson caj@cs.york.ac.uk
Wed Mar 2 18:11:00 GMT 2005


Paolo Carlini wrote:
> Chris Jefferson wrote:
> 
>> This is actually very slightly harder than I thought at first... as 
>> find is optimised for char types.. therefore it might be necessary to 
>> catch if find_if is being given our special comparison object and if 
>> so pass it back to find.. however I'm going to investigate to see a) 
>> how much speed benefit is actually given by the char specialisations 
>> of find and b) how messy it looks delegating find_if to find :)
> 
> 
> Sorry, but I don't understand (I was tempted to write "Huh?!?", but 
> someone explained time ago that it's considered unpolite, so... ;) Which 
> optimization?!? Find or fill?!?
> 
No, you could have said "Huh?!?"

As soon as I'd sent this (but it only just appeared on this list for me, 
along with your reply) I realised I had been suffering brain freeze...

What was worrying me was that I knew some functions (fill and copy it 
turns out) have efficent specialisations, which I assumed would not 
exist in the predicated versions, and therefore we might be losing some 
performance. However now I look more carefully, there is no such case, 
the only "type specific" specialisations are for fill, copy and 
lexicographic_compare (which we haven't disturbed from before)

Therefore my current plan goes something like:

1) Check through all the previously simplified algorithms for anywhere 
where the non-predicate version uses find and the predicate version 
doesn't use find_if, and knock out some test cases.

2) Try delegating find, count, replace, replace_copy, remove_copy and 
remove to find_if, count_if, replace_if, replace_copy_if, remove_copy_if 
and remove_if (while of course adding test cases). I've looked at the 
tree output and x86, and they are very close (the assembler isn't 
identical, but only differs when entering / leaving a function. I hope 
to try to figure out why..)

Chris



More information about the Libstdc++ mailing list