C++ STL 学习笔记 函数对象
2017-03-05 21:43
435 查看
函数对象
c++中函数名后的()称为函数调用运算符。函数调用运算符也可以重载,如果某个类重载了函数调用运算符,则该类的实例就是一个函数对象。函数对象本身并不是很有用,但他们使得算法操作的参数化策略成为可能,使通用性算法变得更加通用(让函数作为参数还可以通过函数指针)
实例
学习代码
c++中函数名后的()称为函数调用运算符。函数调用运算符也可以重载,如果某个类重载了函数调用运算符,则该类的实例就是一个函数对象。函数对象本身并不是很有用,但他们使得算法操作的参数化策略成为可能,使通用性算法变得更加通用(让函数作为参数还可以通过函数指针)
实例
class Add { double operator()(double x,double y) { return x+y; } }; Add plus; //plus就是一个函数对象 cout<<plus(1.2,3.4)<<endl;//通过函数对象调用重载函数 cout<<Add() ()(1.2,3.4)<<endl; //Add()会创建一个临时对象
学习代码
#include <iostream> #include <vector> #include <list> #include <algorithm> using namespace std; /* class absInt { }; */ //class和struct都是定义类,struct成员默认属性为public void print(double i) { cout << i << " "; } void myforeach(vector<double>::iterator & t1, vector<double>::iterator & t2, void(*fun)(double i))//可以通过函数指针将一个函数作为另一个函数的参数 { while (t1 != t2) { fun(*t1); ++t1; } } struct absInt { //重载操作符() int operator()(int val) { return val < 0 ? -val : val; } }; template <typename elementType> void FuncDisplayElement(const elementType & element) { cout << element << " " ; } template <typename elementType> struct DisplayElement { //存储状态 int m_nCount; DisplayElement() { m_nCount = 0; } void operator()(const elementType & element) { ++m_nCount; cout << element << " "; } }; int main() { absInt absObj;//函数对象 int i = -2; unsigned int ui = absObj(i);//通过函数对象调用函数 cout << ui << endl; vector<int> a; for (int i = 0; i < 10; i++) { a.push_back(i); } DisplayElement<int> mResult; mResult = for_each(a.begin(), a.end(), mResult);//把函数对象作为参数传递给另一个函数 cout << endl; cout << "数量" << mResult.m_nCount << endl; list<char> b; for (char c = 'a'; c < 'k'; ++c) { b.push_back(c); } for_each(b.begin(), b.end(), DisplayElement<char>());//DisplayElement<char>()会创建一个临时对象 cout << endl; vector<double> vec = { 76,92,86,74,95 }; cout << "vec里的类容为:" << endl; for_each(vec.begin(), vec.end(), print); cout << "vec里的内容为" << endl; myforeach(vec.begin(), vec.end(), print); getchar(); return 0; }
相关文章推荐
- 【学习笔记】C++高级程序设计:STL:函数对象
- C++ Primer Plus学习笔记之STL函数对象
- C++学习笔记--函数对象
- STL 学习笔记 之 函数对象
- C++函数返回一个对象学习笔记
- C++ 学习笔记(6)函数、局部静态对象、重载函数、内联函数、constexpr函数、调试帮助、函数匹配、函数指针
- C++学习笔记(13)——利用对象、引用、指针调用虚函数
- STL学习笔记(六) 函数对象
- [C++学习笔记14]动态创建对象(定义静态方法实现在map查找具体类名对应的创建函数,并返回函数指针,map真是一个万能类)good
- stl学习笔记2(容器,函数对象)
- STL学习笔记8 -- 函数对象
- [C++学习笔记]--常量对象、常量成员函数和常引用
- 【C++学习笔记】使用控制符及流对象的成员函数控制输出格式
- C++函数对象学习笔记
- C++ 学习笔记(14)重载运算与类型转换、函数对象、function库
- C++学习笔记(六)函数对象
- C++ Standard Stl -- SGI STL源码学习笔记(07) stl_vector 与 一些问题的细化 3 resize函数剖析
- C++学习笔记(八):函数重载、函数指针和函数对象
- C++ STL 学习笔记
- c++ 模板学习笔记:函数模板实现数组通用排序和遍历打印(权哥)