//
// main.cpp
// STL中的函数对象
//
// Created by mac on 2019/5/2.
// Copyright © 2019年 mac. All rights reserved.
// 1.是否支持模版继承?
// 2.模版中存在多个参数? #include <iostream>
#include <functional> using namespace std; /*
STL在<functional>中为常见的C++运算符定义了函数对象。其中负号的定义为:
template <class T>
struct negate:public unary_function<T,T>{
T operator() (const T&x)const{
return -x;
}
}; */ //计算(n,m)之间的和 n+...+m
template <class F>
double sum(F f,int n,int m) {
double result=0;
for (int i=n; i<=m; i++) {
//还有一种简写的方式 result+=f(i);
result+=f.operator()(i);//规范写法
}
return result;
}
int main(int argc, const char * argv[]) {
// insert code here...
cout<<sum(negate<double>(),2,5)<<endl;
return 0;
}

运行结果

-14
Program ended with exit code: 0

Tips

  • 类模版是否支持继承?
  • 代码中的struct跟C中的struct不是一回事
  • sum函数中第一个参数,需要传入一个对象,你看代码中传入了个啥玩意?为什么这样写不会报错?
  • 如何理解unary_function<T,T>?

STL中的函数对象实现负数的定义的更多相关文章

  1. 3.2 STL中的函数对象类模板

    *: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...

  2. STL算法设计理念 - 函数对象和函数对象当参数和返回值

    函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...

  3. STL算法设计理念 - 函数对象和函数对象当參数和返回值

    函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)&q ...

  4. Java中的函数对象

    初次听说java中的函数对象可能,比较的陌生.可以类比着来理解一下,人们常说java中没有了指针,殊不知,java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把 ...

  5. STL——仿函数(函数对象)

    一.仿函数(也叫函数对象)概观 仿函数的作用主要在哪里?从第6章可以看出,STL所提供的各种算法,往往有两个版本,其中一个版本表现出最常用(或最直观)的某种运算,第二个版本则表现出最泛化的演算流程,允 ...

  6. 『嗨威说』算法设计与分析 - STL中Sort函数的实现原理初探

    本文索引目录: 一.对Sort算法实现的个人阅读体会 二.Sort算法使用的三个排序算法的优点介绍 2.1 插入排序的优缺点 2.2 堆排序的优缺点 2.3 快速排序的优缺点 2.4 新的结合排序—— ...

  7. STL 仿函数(函数对象)

    ##定义 仿函数(functor):一种具有函数性质的对象. 仿函数在C++中的新名称为函数对象(function object). 仿函数类对象像函数一样被调用,调用仿函数类对象时,实际调用的是仿函 ...

  8. C++模板中的函数对象

    在C++模板类map中一个参数为Compare类型,该类型为一个比较函数,其完整定义如下: template< class Key, class T, class Compare = std:: ...

  9. Python中的函数对象与闭包

    函数在Python中是第一类对象,可以当做参数传递给其他函数,放在数据结构中,以及作为函数的返回结果. 下面的例子为接受另外一个函数作为输入并调用它 #foo.py def callf(func): ...

随机推荐

  1. sourceinsight4 用设置

    通用设置Options - File Type Options: 显示行号:勾选Show line mumbers选中自动高亮:勾选Hightlight references to selected ...

  2. 微信JS-SDK分享功能的.Net实现代码

    JS-SDK接口是什么? 为了方便开发者实现微信内的网页(基于微信浏览器访问的网页)功能,比如拍照.选图.语音.位置等手机系统的能力,并方便开发者直接使用微信分享.扫一扫等微信特有的能力,微信推出了J ...

  3. spring boot修改代码后无需重启设置,在开发时实现热部署

    Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools) 热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构, ...

  4. 宝塔php open_basedir restriction in effect

    解决方法一: 1.网站管理的  防跨站攻击去掉勾选,重启网站,清除浏览器缓存 解决方法二:

  5. eclipse如何配置tomcat

    依次点击Window->Show View->Other   找到Server,点击OK,看到控制台旁边已有Server了.   点击server下面的链接,依次选择Apache,根据自己 ...

  6. 办公室上网慢原因排查 有人下载东西 设置行为管理 宽带分配设置独立下行宽带 TL-WVR1200L

    办公室上网慢原因排查 有人下载东西  设置行为管理 宽带分配设置独立下行宽带

  7. 快速克隆网站利器-teleport ultra

    快速克隆网站利器-teleport ultra 一.下载 二.操作步骤 第一步:打开这个软件 第二步点击file.下拉选择 New Project Wizred,弹出如下下拉框 这里我们使用第一个或者 ...

  8. OMPL 在windows下的安装

    博客参考:https://blog.csdn.net/shitanding/article/details/82562702 和 https://bitbucket.org/ompl/omplapp/ ...

  9. ROS学习笔记(三)

    机器人建模与仿真URDF(Unified Robot Descrption Format,统一机器人描述格式),ROS提供了URDF的c++解析器.安装语法检查工具sudo apt-get insta ...

  10. 零基础学Python-第一章 :Python介绍和安装-02.Python的发展历史与版本

    pthhon3.0对开发者带来了麻烦,因为2.0个3.0的程序并不是兼容的. 目前python3.0已经变成了真正的主力 官方版本和发行版 发行版会把常用的科学计算的包也给继承进来.这样就不用考虑包和 ...