An algorithm object is an object which encapsulates a generic algorithm. The corresponding concept is called an algorithm.
In generic programming, it is often desirable to parametrize an algorithm 
by sub-algorithms. For example, the std::sort() algorithm in the C++ 
Standard Library takes in an object which defines the ordering to use.
Compared to a usual functor, an algorithm object is different in that 
usually the functor’s operator() is not a function template. For 
example, while normally you would pass a std::less<int>() to the 
std::sort(), with algorithm objects you would pass a LessThan(),
which encapsulates a less-than comparison for all types.