C++ STL 基础及应用 函数对象(仿函数)
Posted 哈士奇超帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ STL 基础及应用 函数对象(仿函数)相关的知识,希望对你有一定的参考价值。
把函数作为对象是程序设计的新思维。STL 通过重载类中的 operator() 函数实现函数对象功能,不但可以对容器中的数据进行各种各样的操作,而且能够维护自己的状态。因此,与标准 C 库函数相比,函数对象更为通用。
本章将介绍函数指针的使用、函数对象的定义、引入目的、使用方法。
C++98 标准和C++11标准下 STL 内置函数对象的详细介绍、适配器类的使用。包括 bind1st bind2nd not1 not2 mem_fun mem_fun_ref ptr_fun bind ref cref 的使用。
函数指针
函数指针是指向函数的指针变量,在程序编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。函数指针主要由以下两方面的用途:调用函数和用作函数参数。函数指针的声明方法
数据类型标识符 (指针变量名) (形参列表);
一般函数的声明为:
int func(int x);
而一个函数指针的声明方法为:
int (*func) (int x);
(*func)的括号是必要的,告诉编译器声明的是函数指针而不是一个具有返回类型为指针的函数,如果不加括号,int* func (int x)则变成了返回值为 int * 的 func(int x) 函数; 后面的形参则根据函数形参而定。函数地址可以通过函数名或者对函数名取址获得,简单示例如下所示:
#include <iostream>
using namespace std;
int Add(int x,int y)
{
return x+y;
}
int main()
{
int (*f)(int x,int y); //声明一个函数指针
f=Add; //函数指针赋值
//也可以写成: f=&Add;
cout<<f(1,2); //像普通函数一样调用
return 0;
}
为何引入函数对象
首先看下面这段代码,使用 for_each 算法求保存在向量中的整数之和:以上是关于C++ STL 基础及应用 函数对象(仿函数)的主要内容,如果未能解决你的问题,请参考以下文章
STL——容器(Set & multiset)之 仿函数(函数对象)functor 的用法
STL——容器(Set & multiset)之 仿函数(函数对象)functor 的用法
C++初阶:STL —— stack and queuestack/queue的介绍及使用 | stack/queue/priority_queue的深度剖析及模拟实现 | 适配器模式 | 仿函数