STL函数对象:与函数指针的比较
来源:互联网 发布:讲文明知礼仪的故事 编辑:程序博客网 时间:2024/06/05 11:14
一、函数对象、函数指针的定义和使用
二者定义方式不同,使用方式相同。
#include <iostream>using namespace std;//function objectclass obj_Add{public:int operator() (int val1, int val2){return val1 + val2;}};//function pointerint fun_Add(int val1, int val2){return val1 + val2;}int main(int argc, char *argv[]){//function objectobj_Add obj_add;cout<<obj_add(2,8)<<endl;//function pointertypedef int (*FUN_ADD)(int, int);FUN_ADD fun_add = &fun_Add;cout<<fun_add(3,8)<<endl;return 1;};二、函数对象、函数指针的区别
2.1 函数对象内可以携带附加数据,函数指针不行
见博客《STL函数对象:定义、及其在STL中的应用》中的2.2节。
http://blog.csdn.net/guowenyan001/article/details/10017799
2.2 函数对象可以用来封装类成员函数指针
#include <iostream>using namespace std;//function objecttemplate <typename T>class fun_Obj{public:fun_Obj(void (T::*f)(char *), T* t): pFunc(f), m_t(t) { }public:void operator() (char* name){(m_t->*pFunc)(name);}private:void (T::*pFunc)(char *);T* m_t;};//class output_Obj{public:void output(char* name){cout<<"Hello "<<name<<endl;}};//int main(int argc, char *argv[]){output_Obj output_obj;fun_Obj<output_Obj> fun_obj(&output_Obj::output, &output_obj);fun_obj("world.");return 1;};
三、让一个函数既接受函数指针,又接受函数对象,最简单的方法就是使用模板。
#include <iostream>using namespace std;//function objectclass great{public:great(int val) : m_val(val) { }public:bool operator() (int val){return val > m_val;}private:int m_val;};//function pointerbool great10(int val){return val > 10;}//functiontemplate <typename FUNC>int count_n(int* arr, int n, FUNC func){int count = 0;for(int i=0; i<n; ++i){if(func(arr[i]))count++;}return count;}//int main(int argc, char *argv[]){int arr[5] = {50,40, 8, 3, 15};//function objectcout<<count_n(arr, 5, great(10))<<endl;//function pointercout<<count_n(arr, 5, great10)<<endl;return 1;};
- STL函数对象:与函数指针的比较
- 函数指针和函数对象的比较
- 函数指针、函数对象、仿函数比较与入门
- 函数指针、函数对象、仿函数比较与入门
- C++手稿:STL中的函数对象与函数指针
- Effective STL - 为指针的关联容器指定比较函数
- 指针与函数_比较函数指针
- 函数对象与函数指针
- 函数对象与函数指针
- 函数对象与函数指针
- 函数指针与C的面向对象
- 模板函数与模板类的区别。模板函数允许隐式调用,所以STL算法允许传入函数指针,也允许传入函数对象
- 对象函数的指针
- C++函数对象与函数指针的不同之处
- 构造函数与对象指针
- 函数指针与function对象
- stl编程概述和函数对象、函数指针
- 类里的对象指针与函数指针
- hdu 4324
- 简单文件操作(Linux下C++实现) 打开,读取 写入 关闭
- 找回EC2的Key Pair文件
- Android SDK/Android.bat does not find SWT.jar file
- 05-session的增删改查
- STL函数对象:与函数指针的比较
- linux C++ socketpair进行父子进程间通信
- 一步一步学数据结构之1--n(二叉树遍历--非递归实现)
- 素数算法逐步优化
- Android:密度计算器
- c/c++ 随机数
- 学生管理系统总结之性能优化
- nyoj-51-爱管闲事的小明
- 状态压缩动态规划