jas*_*ine 11 c++ stl function-object
我看到函数对象经常与STL算法一起使用.功能对象是否因为这些算法而出现?你什么时候在C++中使用函数对象?它的好处是什么?
正如所说的jdv,使用仿函数而不是函数指针,它们更难以优化和内联编译器; 而且,仿函数的一个基本优点是它们可以很容易地保持对它们的调用之间的状态1,因此它们可以根据它们被调用的其他时间而以不同的方式工作,以某种方式跟踪它们使用的参数,...
例如,如果要对两个int容器中的所有元素求和,可以执行以下操作:
struct
{
int sum;
void operator()(int element) { sum+=element; }
} functor;
functor.sum=0;
functor = std::for_each(your_first_container.begin(), your_first_container.end(), functor);
functor = std::for_each(your_second_container.begin(), your_second_container.end(), functor);
std::cout<<"The sum of all the elements is: "<<functor.sum<<std::endl;
Run Code Online (Sandbox Code Playgroud)
一个稍微更精确的说法是,仿函数可以支持多个独立状态(函数可以通过静态/全局变量支持单个状态,既不是线程安全的也不是可重入的).Functors使您可以使用更复杂的状态,例如共享状态(静态字段)和私有状态(实例字段).然而,很少使用这种进一步的灵活性