A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_Tutorial%2FDevelopment%2FFunctor</id>
		<title>C++ Tutorial/Development/Functor - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_Tutorial%2FDevelopment%2FFunctor"/>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B_Tutorial/Development/Functor&amp;action=history"/>
		<updated>2026-04-17T17:59:25Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B_Tutorial/Development/Functor&amp;diff=2143&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B_Tutorial/Development/Functor&amp;diff=2143&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:17Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B_Tutorial/Development/Functor&amp;diff=2144&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B_Tutorial/Development/Functor&amp;diff=2144&amp;oldid=prev"/>
				<updated>2010-05-25T10:28:59Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Demonstrating function pointer passing==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//Revised from&lt;br /&gt;
//STL Tutorial and Reference Guide C++ Programming with the Standard Template L&lt;br /&gt;
ibrary, 2nd Edition&lt;br /&gt;
//by David R. Musser (Author), Atul Saini (Author)&lt;br /&gt;
//# Publisher: Addison-Wesley Pub (Sd) (March 1996)&lt;br /&gt;
//# Language: English&lt;br /&gt;
//# ISBN-10: 0201633981&lt;br /&gt;
//# ISBN-13: 978-0201633986&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cassert&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
template &amp;lt;typename InputIterator, typename T&amp;gt;&lt;br /&gt;
T accumulate1(InputIterator first, InputIterator last, T init, T (*binary_funct&lt;br /&gt;
ion)(T x, T y)) // New parameter&lt;br /&gt;
{&lt;br /&gt;
  while (first != last) {&lt;br /&gt;
    init = (*binary_function)(init, *first);&lt;br /&gt;
    ++first;&lt;br /&gt;
  }&lt;br /&gt;
  return init;&lt;br /&gt;
}&lt;br /&gt;
int multfun(int x, int y) { return x * y; }&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  int x[5] = {2, 3, 5, 7, 11};&lt;br /&gt;
  vector&amp;lt;int&amp;gt; vector1(&amp;amp;x[0], &amp;amp;x[5]);&lt;br /&gt;
  int product = accumulate1(vector1.begin(), vector1.end(), 1, &amp;amp;multfun);&lt;br /&gt;
  cout &amp;lt;&amp;lt; product &amp;lt;&amp;lt; endl;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;2310&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Functor==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;/* The following code example is taken from the book&lt;br /&gt;
 * &amp;quot;C++ Templates - The Complete Guide&amp;quot;&lt;br /&gt;
 * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002&lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.&lt;br /&gt;
 * Permission to copy, use, modify, sell and distribute this software&lt;br /&gt;
 * is granted provided this copyright notice appears in all copies.&lt;br /&gt;
 * This software is provided &amp;quot;as is&amp;quot; without express or implied&lt;br /&gt;
 * warranty, and with no claim as to its suitability for any purpose.&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
class Abs {&lt;br /&gt;
  public:&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;:&lt;br /&gt;
    double operator() (double v) const {&lt;br /&gt;
        return std::abs(v);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
class Sine {&lt;br /&gt;
  public:&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;:&lt;br /&gt;
    double operator() (double a) const {&lt;br /&gt;
        return std::sin(a);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename FO1, typename FO2&amp;gt;&lt;br /&gt;
class Composer {&lt;br /&gt;
  private:&lt;br /&gt;
    FO1 fo1;  // first/inner function object to call&lt;br /&gt;
    FO2 fo2;  // second/outer function object to call&lt;br /&gt;
  public:&lt;br /&gt;
    // constructor: initialize function objects&lt;br /&gt;
    Composer (FO1 f1, FO2 f2)&lt;br /&gt;
     : fo1(f1), fo2(f2) {&lt;br /&gt;
    }&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;: nested call of function objects&lt;br /&gt;
    double operator() (double v) {&lt;br /&gt;
        return fo2(fo1(v));&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template&amp;lt;typename FO&amp;gt;&lt;br /&gt;
void print_values (FO fo)&lt;br /&gt;
{&lt;br /&gt;
    for (int i=-2; i&amp;lt;3; ++i) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;f(&amp;quot; &amp;lt;&amp;lt; i*0.1&lt;br /&gt;
                  &amp;lt;&amp;lt; &amp;quot;) = &amp;quot; &amp;lt;&amp;lt; fo(i*0.1)&lt;br /&gt;
                  &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    // print sin(abs(-0.5))&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; Composer&amp;lt;Abs,Sine&amp;gt;(Abs(),Sine())(-0.5) &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
    // print abs() of some values&lt;br /&gt;
    print_values(Abs());&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print sin() of some values&lt;br /&gt;
    print_values(Sine());&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print sin(abs()) of some values&lt;br /&gt;
    print_values(Composer&amp;lt;Abs, Sine&amp;gt;(Abs(), Sine()));&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print abs(sin()) of some values&lt;br /&gt;
    print_values(Composer&amp;lt;Sine, Abs&amp;gt;(Sine(), Abs()));&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;0.479426&lt;br /&gt;
f(-0.2) = 0.2&lt;br /&gt;
f(-0.1) = 0.1&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.1&lt;br /&gt;
f(0.2) = 0.2&lt;br /&gt;
f(-0.2) = -0.198669&lt;br /&gt;
f(-0.1) = -0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&lt;br /&gt;
f(-0.2) = 0.198669&lt;br /&gt;
f(-0.1) = 0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&lt;br /&gt;
f(-0.2) = 0.198669&lt;br /&gt;
f(-0.1) = 0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Functor compose 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;/* The following code example is taken from the book&lt;br /&gt;
 * &amp;quot;C++ Templates - The Complete Guide&amp;quot;&lt;br /&gt;
 * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002&lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.&lt;br /&gt;
 * Permission to copy, use, modify, sell and distribute this software&lt;br /&gt;
 * is granted provided this copyright notice appears in all copies.&lt;br /&gt;
 * This software is provided &amp;quot;as is&amp;quot; without express or implied&lt;br /&gt;
 * warranty, and with no claim as to its suitability for any purpose.&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
class Abs {&lt;br /&gt;
  public:&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;:&lt;br /&gt;
    double operator() (double v) const {&lt;br /&gt;
        return std::abs(v);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
class Sine {&lt;br /&gt;
  public:&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;:&lt;br /&gt;
    double operator() (double a) const {&lt;br /&gt;
        return std::sin(a);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename FO1, typename FO2&amp;gt;&lt;br /&gt;
class Composer {&lt;br /&gt;
  private:&lt;br /&gt;
    FO1 fo1;  // first/inner function object to call&lt;br /&gt;
    FO2 fo2;  // second/outer function object to call&lt;br /&gt;
  public:&lt;br /&gt;
    // constructor: initialize function objects&lt;br /&gt;
    Composer (FO1 f1, FO2 f2)&lt;br /&gt;
     : fo1(f1), fo2(f2) {&lt;br /&gt;
    }&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;: nested call of function objects&lt;br /&gt;
    double operator() (double v) {&lt;br /&gt;
        return fo2(fo1(v));&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename FO1, typename FO2&amp;gt;&lt;br /&gt;
inline&lt;br /&gt;
Composer&amp;lt;FO1,FO2&amp;gt; compose (FO1 f1, FO2 f2) {&lt;br /&gt;
    return Composer&amp;lt;FO1,FO2&amp;gt; (f1, f2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
template&amp;lt;typename FO&amp;gt;&lt;br /&gt;
void print_values (FO fo)&lt;br /&gt;
{&lt;br /&gt;
    for (int i=-2; i&amp;lt;3; ++i) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;f(&amp;quot; &amp;lt;&amp;lt; i*0.1&lt;br /&gt;
                  &amp;lt;&amp;lt; &amp;quot;) = &amp;quot; &amp;lt;&amp;lt; fo(i*0.1)&lt;br /&gt;
                  &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    // print sin(abs(-0.5))&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; compose(Abs(),Sine())(0.5) &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
    // print abs() of some values&lt;br /&gt;
    print_values(Abs());&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print sin() of some values&lt;br /&gt;
    print_values(Sine());&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print sin(abs()) of some values&lt;br /&gt;
    print_values(compose(Abs(),Sine()));&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print abs(sin()) of some values&lt;br /&gt;
    print_values(compose(Sine(),Abs()));&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;0.479426&lt;br /&gt;
f(-0.2) = 0.2&lt;br /&gt;
f(-0.1) = 0.1&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.1&lt;br /&gt;
f(0.2) = 0.2&lt;br /&gt;
f(-0.2) = -0.198669&lt;br /&gt;
f(-0.1) = -0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&lt;br /&gt;
f(-0.2) = 0.198669&lt;br /&gt;
f(-0.1) = 0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&lt;br /&gt;
f(-0.2) = 0.198669&lt;br /&gt;
f(-0.1) = 0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Functor compose 3==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;/* The following code example is taken from the book&lt;br /&gt;
 * &amp;quot;C++ Templates - The Complete Guide&amp;quot;&lt;br /&gt;
 * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002&lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.&lt;br /&gt;
 * Permission to copy, use, modify, sell and distribute this software&lt;br /&gt;
 * is granted provided this copyright notice appears in all copies.&lt;br /&gt;
 * This software is provided &amp;quot;as is&amp;quot; without express or implied&lt;br /&gt;
 * warranty, and with no claim as to its suitability for any purpose.&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
class Abs {&lt;br /&gt;
  public:&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;:&lt;br /&gt;
    double operator() (double v) const {&lt;br /&gt;
        return std::abs(v);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
class Sine {&lt;br /&gt;
  public:&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;:&lt;br /&gt;
    double operator() (double a) const {&lt;br /&gt;
        return std::sin(a);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;typename C, int N&amp;gt;&lt;br /&gt;
class BaseMem : public C {&lt;br /&gt;
  public:&lt;br /&gt;
    BaseMem(C&amp;amp; c) : C(c) { }&lt;br /&gt;
    BaseMem(C const&amp;amp; c) : C(c) { }&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;typename FO1, typename FO2&amp;gt;&lt;br /&gt;
class Composer : private BaseMem&amp;lt;FO1,1&amp;gt;,&lt;br /&gt;
                 private BaseMem&amp;lt;FO2,2&amp;gt; {&lt;br /&gt;
  public:&lt;br /&gt;
    // constructor: initialize function objects&lt;br /&gt;
    Composer(FO1 f1, FO2 f2)&lt;br /&gt;
     : BaseMem&amp;lt;FO1,1&amp;gt;(f1), BaseMem&amp;lt;FO2,2&amp;gt;(f2) {&lt;br /&gt;
    }&lt;br /&gt;
    // &amp;quot;&amp;quot;function call&amp;quot;&amp;quot;: nested call of function objects&lt;br /&gt;
    double operator() (double v) {&lt;br /&gt;
        return BaseMem&amp;lt;FO2,2&amp;gt;::operator()&lt;br /&gt;
                 (BaseMem&amp;lt;FO1,1&amp;gt;::operator()(v));&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;typename FO1, typename FO2&amp;gt;&lt;br /&gt;
inline&lt;br /&gt;
Composer&amp;lt;FO1,FO2&amp;gt; compose (FO1 f1, FO2 f2) {&lt;br /&gt;
    return Composer&amp;lt;FO1,FO2&amp;gt; (f1, f2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
template&amp;lt;typename FO&amp;gt;&lt;br /&gt;
void print_values (FO fo)&lt;br /&gt;
{&lt;br /&gt;
    for (int i=-2; i&amp;lt;3; ++i) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;f(&amp;quot; &amp;lt;&amp;lt; i*0.1&lt;br /&gt;
                  &amp;lt;&amp;lt; &amp;quot;) = &amp;quot; &amp;lt;&amp;lt; fo(i*0.1)&lt;br /&gt;
                  &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    // print sin(abs(-0.5))&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; compose(Abs(),Sine())(0.5) &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
    // print abs() of some values&lt;br /&gt;
    print_values(Abs());&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print sin() of some values&lt;br /&gt;
    print_values(Sine());&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print sin(abs()) of some values&lt;br /&gt;
    print_values(compose(Abs(),Sine()));&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print abs(sin()) of some values&lt;br /&gt;
    print_values(compose(Sine(),Abs()));&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    // print sin(sin()) of some values&lt;br /&gt;
    print_values(compose(Sine(),Sine()));&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;0.479426&lt;br /&gt;
f(-0.2) = 0.2&lt;br /&gt;
f(-0.1) = 0.1&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.1&lt;br /&gt;
f(0.2) = 0.2&lt;br /&gt;
f(-0.2) = -0.198669&lt;br /&gt;
f(-0.1) = -0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&lt;br /&gt;
f(-0.2) = 0.198669&lt;br /&gt;
f(-0.1) = 0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&lt;br /&gt;
f(-0.2) = 0.198669&lt;br /&gt;
f(-0.1) = 0.0998334&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0998334&lt;br /&gt;
f(0.2) = 0.198669&lt;br /&gt;
f(-0.2) = -0.197365&lt;br /&gt;
f(-0.1) = -0.0996677&lt;br /&gt;
f(0) = 0&lt;br /&gt;
f(0.1) = 0.0996677&lt;br /&gt;
f(0.2) = 0.197365&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using a function object for operation counting, first version==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//Revised from&lt;br /&gt;
//STL Tutorial and Reference Guide C++ Programming with the Standard Template L&lt;br /&gt;
ibrary, 2nd Edition&lt;br /&gt;
//by David R. Musser (Author), Atul Saini (Author)&lt;br /&gt;
//# Publisher: Addison-Wesley Pub (Sd) (March 1996)&lt;br /&gt;
//# Language: English&lt;br /&gt;
//# ISBN-10: 0201633981&lt;br /&gt;
//# ISBN-13: 978-0201633986&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#include &amp;lt;cassert&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
#include &amp;lt;functional&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
class less_with_count : public binary_function&amp;lt;T, T, bool&amp;gt; {&lt;br /&gt;
public:&lt;br /&gt;
  less_with_count() { }&lt;br /&gt;
  bool operator()(const T&amp;amp; x, const T&amp;amp; y) {&lt;br /&gt;
        ++counter;&lt;br /&gt;
        return x &amp;lt; y;&lt;br /&gt;
  }&lt;br /&gt;
  long report() const {return counter;}&lt;br /&gt;
  static long counter;&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
long less_with_count&amp;lt;T&amp;gt;::counter = 0;&lt;br /&gt;
int main() &lt;br /&gt;
{&lt;br /&gt;
  const long N1 = 1000, N2 = 128000;&lt;br /&gt;
  for (long N = N1; N &amp;lt;= N2; N *= 2) { &lt;br /&gt;
    vector&amp;lt;int&amp;gt; vector1;&lt;br /&gt;
    for (int k = 0; k &amp;lt; N; ++k) &lt;br /&gt;
      vector1.push_back(k);&lt;br /&gt;
      &lt;br /&gt;
    random_shuffle(vector1.begin(), vector1.end());&lt;br /&gt;
    less_with_count&amp;lt;int&amp;gt; comp_counter;&lt;br /&gt;
    less_with_count&amp;lt;int&amp;gt;::counter = 0;&lt;br /&gt;
    sort(vector1.begin(), vector1.end(), comp_counter);&lt;br /&gt;
    cout &amp;lt;&amp;lt; comp_counter.report() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;11846&lt;br /&gt;
26397&lt;br /&gt;
56776&lt;br /&gt;
125715&lt;br /&gt;
271505&lt;br /&gt;
596740&lt;br /&gt;
1235889&lt;br /&gt;
2727581&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using a function object for operation counting, second version==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//Revised from&lt;br /&gt;
//STL Tutorial and Reference Guide C++ Programming with the Standard Template L&lt;br /&gt;
ibrary, 2nd Edition&lt;br /&gt;
//by David R. Musser (Author), Atul Saini (Author)&lt;br /&gt;
//# Publisher: Addison-Wesley Pub (Sd) (March 1996)&lt;br /&gt;
//# Language: English&lt;br /&gt;
//# ISBN-10: 0201633981&lt;br /&gt;
//# ISBN-13: 978-0201633986&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#include &amp;lt;cassert&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
#include &amp;lt;functional&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
class less_with_count : public binary_function&amp;lt;T, T, bool&amp;gt; {&lt;br /&gt;
public:&lt;br /&gt;
  less_with_count() : counter(0), progenitor(0) { }&lt;br /&gt;
  // Copy constructor:&lt;br /&gt;
  less_with_count(less_with_count&amp;lt;T&amp;gt;&amp;amp; x) : counter(0), &lt;br /&gt;
      progenitor(x.progenitor ? x.progenitor : &amp;amp;x) { }&lt;br /&gt;
  bool operator()(const T&amp;amp; x, const T&amp;amp; y) {&lt;br /&gt;
    ++counter;&lt;br /&gt;
    return x &amp;lt; y;&lt;br /&gt;
  }&lt;br /&gt;
  long report() const { return counter; }&lt;br /&gt;
  ~less_with_count() {  // Destructor&lt;br /&gt;
    if (progenitor) {&lt;br /&gt;
      progenitor-&amp;gt;counter += counter; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
private:&lt;br /&gt;
  long counter;&lt;br /&gt;
  less_with_count&amp;lt;T&amp;gt;* progenitor;&lt;br /&gt;
};&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Using a function object for operation counting, &amp;quot;&lt;br /&gt;
       &amp;lt;&amp;lt; &amp;quot;second version.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
  const long N1 = 1000, N2 = 128000;&lt;br /&gt;
  for (long N = N1; N &amp;lt;= N2; N *= 2) { &lt;br /&gt;
    vector&amp;lt;int&amp;gt; vector1;&lt;br /&gt;
    for (int k = 0; k &amp;lt; N; ++k) &lt;br /&gt;
      vector1.push_back(k);&lt;br /&gt;
    random_shuffle(vector1.begin(), vector1.end());&lt;br /&gt;
    less_with_count&amp;lt;int&amp;gt; comp_counter;&lt;br /&gt;
    sort(vector1.begin(), vector1.end(), comp_counter);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Problem size &amp;quot; &amp;lt;&amp;lt; setw(9) &amp;lt;&amp;lt; N &lt;br /&gt;
         &amp;lt;&amp;lt; &amp;quot;,  comparisons performed: &amp;quot; &lt;br /&gt;
         &amp;lt;&amp;lt; setw(9) &amp;lt;&amp;lt; comp_counter.report() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Using a function object for operation counting, second version.&lt;br /&gt;
Problem size      1000,  comparisons performed:     11846&lt;br /&gt;
Problem size      2000,  comparisons performed:     26397&lt;br /&gt;
Problem size      4000,  comparisons performed:     56776&lt;br /&gt;
Problem size      8000,  comparisons performed:    125715&lt;br /&gt;
Problem size     16000,  comparisons performed:    271505&lt;br /&gt;
Problem size     32000,  comparisons performed:    596740&lt;br /&gt;
Problem size     64000,  comparisons performed:   1235889&lt;br /&gt;
Problem size    128000,  comparisons performed:   2727581&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>