[C/C++标准库]_[初级]_[函数对象functor的使用]
来源:互联网 发布:vb中string是什么意思 编辑:程序博客网 时间:2024/05/16 00:52
Functor
std::set
场景:
1. functor其实就是一个类对象,因为它重载了operator()操作符,所以可以把实例当作函数名那样操作,在C里也只有函数可以这么做.比如语句 f(1,2);在cpp
必须通过上下文判断f是对象还是函数.
2.在使用stl的容器类或算法函数时,经常需要自己传入一个functo作为参数或模板.
#include <string.h>#include <iostream>#include <fstream>#include <string>#include <utility>#include <set>using namespace std;class Person{public:Person(int code,const string& name,const string& grade,const string& address):code_(code){name_ = name;grade_ = grade;address_ = address;}~Person(){}int code_;// 学号.string name_;// name.string grade_; //grade.string address_;void operator()(){cout << " code_: " << code_ << " name_: " << name_ << " grade_: " << grade_ << " address_: " << address_ << endl;}};class PersonCompare{public:bool operator() (const Person* p1, const Person* p2) const {return p1->code_ < p2->code_;}/* data */};class test_functor{public:void operator()(int x,int y){cout << "x+y: " << x+y << endl;}/* data */};int main(int argc, char const *argv[]){//1.simple functortest_functor tf;tf(1,2);//2.sort functortypedef set<Person*,PersonCompare> PersonSet;PersonSet::iterator it;PersonSet ps;ps.insert(new Person(3,"张三","高三(1)班","北京朝阳区"));ps.insert(new Person(2,"李四","高三(2)班","北京海淀区"));ps.insert(new Person(1,"龙五","高三(3)班","北京王府井"));// ps.insert(new Person(1,"龙四","高三(3)班","北京王府井"));for (it = ps.begin(); it != ps.end(); ++it){(*(*it))();}cout << endl;pair<PersonSet::iterator,bool> res = ps.insert(new Person(1,"张四","高三(3)班","北京王府井"));if (!res.second){cout << "insert fail,exist name: " << (*(res.first))->name_ << endl;}for (it = ps.begin(); it != ps.end(); ++it){(*(*it))();}return 0;}
输出:
x+y: 3 code_: 1 name_: 龙五 grade_: 高三(3)班 address_: 北京王府井 code_: 2 name_: 李四 grade_: 高三(2)班 address_: 北京海淀区 code_: 3 name_: 张三 grade_: 高三(1)班 address_: 北京朝阳区insert fail,exist name: 龙五 code_: 1 name_: 龙五 grade_: 高三(3)班 address_: 北京王府井 code_: 2 name_: 李四 grade_: 高三(2)班 address_: 北京海淀区 code_: 3 name_: 张三 grade_: 高三(1)班 address_: 北京朝阳区[Finished in 0.1s]
参考:
1.《C++ Standard Library, The: A Tutorial and Reference》
0 0
- [C/C++标准库]_[初级]_[函数对象functor的使用]
- [C/C++标准库]_[初级]_[使用string stream]
- [C/C++标准库]_[初级]_[使用ctype里的isxxx函数时要注意的事项]
- [C/C++标准库]_[初级]_[map的查找函数分析]
- [C/C++标准库]_[初级]_[如何实现std::string自己的Format(sprintf)函数]
- [C/C++标准库]_[初级]_[std::map的使用细节]
- [C/C++标准库]_[初级]_[优先队列priority_queue的使用]
- [C/C++]_[初级]_[标准字符串std::string 所有函数的用法总结]
- [C/C++标准库]_[初级]_[使用freopen重定向标准输出]
- [C/C++标准库]_[初级]_[使用时间库]
- [C/C++标准库]_[初级]_[signal信号浅析]
- [C/C++标准库]_[初级]_[集合操作]
- [C/C++标准库]_[初级]_[分割字符串Split]
- [C/C++标准库]_[初级]_[unary_function 和 binary_function]
- [C/C++标准库]_[初级]_[unary_function 和 binary_function]
- [C/C++标准库]_[初级]_[标准库里提供的排序算法]
- [C/C++标准库]_[初级]_[不使用正则替换和删除字符串]
- [C/C++标准库]_[初级]_[使用auto_ptr智能指针]
- A*算法详解
- 封装printf函数,针对工程中不同的模块(can,gps, gsm)进行调试输出
- maven 中的错误
- POJ 2196 - Specialized Four-Digit Numbers
- 九度题目1184:二叉树遍历
- [C/C++标准库]_[初级]_[函数对象functor的使用]
- C++primer plus第六版课后编程题答案11.2 绝世大坑
- 从新开始
- jQuery Ajax 实例 全解析
- git简单实用笔记
- 页面跳转的两个方法 1导航视图控制器 2模态
- C语言,内存对齐,内存分配,地址操作,结构体(二)
- 2014年腾讯暑假实习软件开发笔试题汇总
- DB2常用命令