仿函数

template<class _Arg1,class _Arg2,class _Result>
struct my_binary_function
{typedef _Arg1 first_argument_type;typedef _Arg2 second_argument_type;typedef _Result result_type;
}
template <class _Tp>
struct my_plus : public my_binary_function<_Tp,_Tp,_Tp>
{_Tp operator()(const _Tp& _x,const _Tp& _y) const{return _x+_y;}
};
int main()
{int x=my_plus<int>()(12,23);//先是创建一个无名对象,然后传了俩个参数
}

lambda表达式

很像仿函数

类似于函数里面的函数

里面的变量不能改变,都是加了const的,加了mutable的变量,后面即使加了const也是可以改变的

里面的变量是重新拷贝出来的和外面的变量不一样

全局变量不需要捕获

[] 不捕获变量

[=]全部捕获按照值捕获

[&]以引用的方式捕获,他的变量是可以改变的,因为以你引用的底层就是指针

[=,&a]a是引用捕获,
[this]

uto x0=[]()->int {return g_max;}

函数中this指针可以捕获,但是不可以捕获this指针所指之物

this指针不可变,但是this指针所指之物可以变

int main()
{auto f=[](int a,int b)->int {return a+b;};int x=f(12,23);cout<<x<<endl;
}
int fun()
{Object objx(10);auto f1=[&]()->void{objx.Value()=100;};auto f2=[=]()->int{int a=objx.Value();//objx是重新构造的return a;};int x=f2;

mutable

class Object
{int value;mutable int num;//有了这个关键字,即使fun方法加了const,num也是可以修改
public:Object(int x=0,int y=0)value{x},num{y}{}int fun()const{int a=10;a+=10;this->num+=10;return num;}
};
template<class _BI _first,_BI last,_Fn _func)
{cout << typeid(_Fn).name()<<endl;for(;_first!=_last;++_first){_func(*_first);}
}
void Print_Ar(int x)
{printf("%d",x);
}
struct Print
{void operator()(int x)const{printf("%d ",x);}
};
int main()
{std::vector<int> ar={12,23,34,45,56,67,78};my_for_each(ar.begin(),ar.end(),Print_Ar);//函数指针cout<<endl;my_for_each(ar.begin(),ar,end(),Print());//仿函数,函数对象cout<<endl;my_for_each(ar.begin(),ar.end(),[](int a)->void{printf("%d ",a);});//lambda表达式return 0;
}

lambda表达式 mutable 仿函数相关推荐

  1. C++中的Lambda表达式详解

    函数对象与Lambdas 你编写代码时,尤其是使用 STL 算法时,可能会使用函数指针和函数对象来解决问题和执行计算.函数指针和函数对象各有利弊.例如,函数指针具有最低的语法开销,但不保持范围内的状态 ...

  2. c++中lambda表达式用法

    lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读. 所谓函数对象,其实就是对operator()进行重载进 ...

  3. C++11 lambda表达式、function类模板、bind函数适配器

    文章目录 lambda表达式 lambda表达式的语法 lambda表达式的原理 function模板 function与重载函数 bind函数适配器 lambda表达式 当我们在写代码的时候如果经常 ...

  4. 可变参数模板、右值引用带来的移动语义完美转发、lambda表达式的理解

    可变参数模板 可变参数模板对参数进行了高度泛化,可以表示任意数目.任意类型的参数: 语法为:在class或者typename后面带上省略号. Template<class ... T> v ...

  5. C++中的lambda表达式和线程库

    98中的一个例子 如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法 #include <algorithm> #include <functional> ...

  6. C++11 学习笔记 lambda表达式

    http://blog.csdn.net/fjzpdkf/article/details/50249287 lambda表达式是C++11最重要也最常用的一个特性之一.lambda来源于函数式编程的概 ...

  7. 泛型算法(lambda表达式、function类模板、bind函数适配器、迭代器类别、链表数据结构独有的算法)

    文章目录 概念 find()函数 迭代器令算法不依赖于容器 但算法依赖于元素类型的操作 算法永远不会执行容器的操作 只读算法 accumulate()函数 从两个序列中读取元素(equal函数为例) ...

  8. lambda表达式相关

    转载自:   http://www.jb51.net/article/56147.htm 今天就直接点儿,从代码撸起走,, 复制代码代码如下: #include<iostream> usi ...

  9. C++11 Lambda表达式

    1.简介 1.1定义 C++11新增了很多特性,Lambda表达式(Lambda expression)就是其中之一,很多语言都提供了 Lambda 表达式,如 Python,Java ,C#等.本质 ...

最新文章

  1. RobotFramework下的http接口自动化Set Request Body 关键字的使用
  2. AcWing 734. 能量石 (01背包)+(贪心 - 领项交换)
  3. 中国安防为何世界最强?中科院AI+安防报告,解密8大趋势和8大限制【附下载】| 智东西内参...
  4. vue2.0 通过v-html指令渲染的富文本无法修改样式的解决方案
  5. NPOI的excel导出1
  6. Input.GetAxis 获取轴
  7. 操作系统(十)进程通信
  8. linux中sort命令实例,Linux命令之排序命令sort使用实例
  9. SQL基础E-R图画法(二)
  10. python中typeerror_python – TypeError:ufunc subtract不能使用类型为dtype(‘
  11. LeetCode 57. 插入区间(python、c++)
  12. Android Multimedia框架总结(十七)音频开发基础知识
  13. automake连载--Linux下使用autoconfig automake进阶
  14. Linux学习笔记(9)
  15. 电子凸轮设计之数学基础设计
  16. causalml安装记录
  17. [.Net码农]RDLC报表中使用自定义函数
  18. 时间序列的分析及滚动预测代码
  19. SimpleITK使用——4. 奇怪的问题
  20. 第一章计算机系统基础知识,计算机系统基础知识 第一章(未完待续)

热门文章

  1. babelrc 和 babel.config.js区别
  2. 这一届 NFT 正用“躺平”和“暗黑”对抗熊市
  3. 编程语言排行榜:JavaScript 力压 Java和Python
  4. python获取浏览器Cookies作业
  5. JavaScript实现“打地鼠”游戏开发(3)——锤子的显示及游戏音效的添加(基于H5+CSS3+JS+jQuery实现)
  6. Nginx 日志配置、日志切割、日志切割脚本
  7. 进行游戏角色设计 设计要领必须要掌握
  8. Docker容器设置端口映射的方法
  9. java jbutton 大小_java-jButton在运行时调整大小
  10. C#监控-通过PerformanceCounter实现Process的Cpu占用率以及GC占用监控