代码如下:

#include <iostream>
#include <string>
using namespace std;//函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值
class MyAdd
{public:int operator()(int a, int b){return a + b;}
};void test01()
{MyAdd myAdd;cout << myAdd(10, 10) << endl;
}//函数对象可以有自己的状态
class MyPrint
{public:MyPrint(){count = 0;}void operator()(string test){cout << test << endl;count++;}int count = 0;
};void test02()
{MyPrint myPrint;myPrint("hello world");myPrint("hello world");myPrint("hello world");cout << "count = " << myPrint.count << endl;}//函数对象可以作为参数传递
void doPrint(MyPrint &mp, string test)
{mp(test);
}void test03()
{MyPrint myPrint;doPrint(myPrint, "hello c++");
}int main()
{test01();test02();test03();return 0;
}

测试结果:

总结:

一元谓词
代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;struct GreaterFive {bool operator()(int a){return a > 5;}
};void test01()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());if (it == v.end()){cout << "no find" << endl;}else{cout << "find" << *it << endl;}}int main()
{test01();return 0;
}

测试结果:

总结:

二元谓词
代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;class cmp
{public:bool operator()(int a, int b){return a > b;}
};void test01()
{vector<int>v;v.push_back(10);v.push_back(40);v.push_back(20);v.push_back(30);v.push_back(50);sort(v.begin(), v.end());for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;cout << "---------------------------------------" << endl;sort(v.begin(), v.end(), cmp());for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;}int main() {test01();return 0;
}

测试结果:

总结:

代码如下:

#include <iostream>
#include <functional>
using namespace std;void test01()
{negate<int> n;cout << n(50) << endl;
}void test02()
{plus<int>p;cout << p(10, 20) << endl;
}int main()
{test01();test02();return 0;
}

测试结果:

总结:

代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;class cmp
{public:bool operator()(int a, int b){return a > b;}
};void test01()
{vector<int>v;v.push_back(10);v.push_back(20);v.push_back(50);v.push_back(40);v.push_back(90);v.push_back(70);for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;sort(v.begin(), v.end(), greater<int>());for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;}int main()
{test01();return 0;
}

测试结果:

总结:


代码如下:

#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
using namespace std;void test01()
{vector<bool> v;v.push_back(true);v.push_back(false);v.push_back(true);v.push_back(false);for (vector<bool>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;vector<bool> v2;v2.resize(v.size());transform(v.begin(), v.end(), v2.begin(), logical_not<bool>());for (vector<bool>::iterator it = v2.begin(); it != v2.end(); it++){cout << *it << " ";}cout << endl;}int main()
{test01();return 0;
}

测试结果:

总结:

[C++STL]仿函数用法介绍相关推荐

  1. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  2. STL vector 用法介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  3. c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  4. c++ stl栈容器stack用法介绍

    stack堆栈容器 堆栈是一个线性表,插入和删除只在表的一端进行.这一端称为栈顶(Stack Top),另一端则为栈底(Stack Bottom).堆栈的元素插入称为入栈,元素的删除称为出栈.由于元素 ...

  5. awk 和sed的用法介绍

    awk 和sed的用法介绍 一.awk的介绍 1. 作用及用法要求 2. 使用方法 (1)使用的命令: (2)举例说明: 二.sed的介绍 1. 用法介绍及常用命令 2. 具体使用 一.awk的介绍 ...

  6. Scanpy(一)AnnData数据结构与一些API用法介绍

    目录 Scanpy简介与安装 AnnData AnnData的结构 h5ad:AnnData的写入和读取 Scanpy中一些常用api的用法介绍 sc.pp.filter_cells sc.pp.fi ...

  7. php中使用mysql的视图_MYSQL中视图的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于MYSQL中视图的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.什么是视图 执行一条SQL,将结果集保存在一张虚拟表中 (相关 ...

  8. pm2常用的命令用法介绍

    pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下面我们来看pm2常用的命令用法介绍吧 ...

  9. predicate java_java8中predicate的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于java8中predicate的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 传递代码 我们首先看一个例子,假设你有一个 Appl ...

最新文章

  1. flex版的流程设计器
  2. java 执行cmd 堵塞_java中调用cmd命令被阻塞无法返回和继续执行
  3. 移动用户体验设计中的原型应用
  4. 分布式消息中间件 : Rocketmq
  5. 使用反射调用构造器创建对象
  6. 用java实现归并,算法:JAVA实现归并排序
  7. 1077. 互评成绩计算 (20)-PAT乙级真题
  8. poj 3841 Double Queue (AVL树入门)
  9. MyCat全局序列之本地文件方式
  10. win7提示由于系统注册表文件丢失或损坏,无法开机
  11. Uniapp消息推送配置各个厂商UniPush
  12. 用html5画卡通人物源代码,用canvas画一个卡通人物!!
  13. spring boot中如何实现在手机注册和登录时获取验证码(阿里短信服务)
  14. [HDCTF2019]Maze
  15. 【黑灰产犯罪研究】DDOS攻击
  16. pixi 小游戏_关于PIXI引擎制作页面小游戏的几个总结
  17. 如何成为一名优秀的网络信息安全工程师?
  18. 进击的UI-----------------UITableView(表视图)
  19. 银行手机APP软件做性能测试吗,浅谈银行开放平台应用系统性能测试
  20. Bootstrap免费字体和图标网站

热门文章

  1. 保姆级C语言版高斯坐标正算反算倾情奉献!
  2. 【MATLAB统计分析与应用100例】案例003:matlab调用smooth函数进行加噪数据的平滑处理
  3. 【Envi风暴】Envi插件大全:多波段拆分工具的巧妙使用
  4. 为什么越来越多的开发者选择使用Spring Boot
  5. 一、iVX简介(IVX 快速开发教程)
  6. flex java框架_fleXive——JavaEE框架
  7. python查看图片的源代码_python实现图片筛选程序
  8. 嵌入式开发linux工具,嵌入式Linux开发入门之MfgTool工具的使用
  9. 安卓设备刷linux发行版,绝对精华,大牛教你在Android系统上安装linux发行版
  10. 数学家看到就把持不住,高斯被它迷得神魂颠倒,2600年的数学史里的一个奇迹……...