On Jun 6, 6:15 pm, Saeed Amrollahi<amrollahi.sa...@gmail.com> wrote:
On Jun 5, 11:50 pm, albert kao<albertk...@gmail.com> wrote:
3. There is no performance gain by rewriting bigger() with function
object. Calling member function is almost as efficient as
calling global function.
That is wrong. For most implementations of the STL you will find
that function objects can be /faster/ than passing free function
references/pointers. In the ops case
struct Bigger
{
bool operator ( ) ( int i ) const { return abs(i)>= D ; }
} ;
...
count += count_if(diff + 1, diff + N, Bigger());
is likely to be much faster than
bool bigger(int i) { return abs(i)>= D; }
...
count += count_if(diff + 1, diff + N, bigger);
Also, on many platforms
struct Bigger
{
bool operator ( ) ( int i ) const { return i>= D || i<= -
D ; }
} ;
will be faster still. Give it a try and you will see. By the way,
if you put the count_if into a loop you will get better sampling
and higher signal to noise. For example:
int count = 0 ;
for ( int k = 0 ; k< 1024 ; ++k ) {
count += count_if(diff + 1, diff + N, Bigger()) ;
}
KHD
You are right. Of course we take advantage of inline expansion of
operator(). In this case we have %25 performance improvement.
structure), the results are identical.
no performance improvement. Why?