Bind2nd源码解析

内联函数online的定义和作用 说明: 内联函数是一个小型函数,以牺牲空间来节省函数调用带来的额外开销,一般用以比较小函数或者使用频率很高的函数,函数内部内部没有复杂的语句,如开关语句switch,循环语句for等 定义: (1)在 C++ 中,可以在定义函数时,在返回值类型前面加上 inline 关键字 inline int max() { ...... return 0; } (二)直接在类的内部进行函数的声明和定义,则默认其是内联函数 class A { public: int max() { ...... ret 阅读详情

例如:

#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;

int main(int argc, char *argv[])
{
	vector<int> coll{ 1, 3, 5, 7, 9, 11, 13, 15 };
	// 接着下面有bind2nd的具体实现
	cout << count_if(coll.begin(), coll.end(), 
					bind2nd(greater<int>(), 10)) << endl;
	return 0;
}

运行结果为:3
返回大于10的数字的个数,共3个。
1、调用模板函数bind2nd,第一个参数为greater临时对象。

// TEMPLATE FUNCTION bind2nd
template<class _Fn2, class _Ty> inline
binder2nd<_Fn2> bind2nd(const _Fn2& _Func, const _Ty& _Right)
{	
	// return a binder2nd functor adapter
	typename _Fn2::second_argument_type _Val(_Right);
	return (binder2nd<_Fn2>(_Func, _Val));
}

2、模板类binder2nd的定义:

// TEMPLATE CLASS binder2nd
template<class _Fn2>
class binder2nd : public unary_function<typename _Fn2::first_argument_type,
			typename _Fn2::result_type>
	{	
	// functor adapter _Func(left, stored)
public:
	typedef unary_function<typename _Fn2::first_argument_type, typename _Fn2::result_type> _Base;
	typedef typename _Base::argument_type argument_type;
	typedef typename _Base::result_type result_type;

	binder2nd(const _Fn2& _Func,
		const typename _Fn2::second_argument_type& _Right)
		: op(_Func), value(_Right)
		{	
			// construct from functor and right operand
		}

	result_type operator()(const argument_type& _Left) const
		{	// apply functor to operands
			return (op(_Left, value));
		}

	result_type operator()(argument_type& _Left) const
		{	// apply functor to operands
			return (op(_Left, value));
		}

protected:
	_Fn2 op;	// the functor to apply
	typename _Fn2::second_argument_type value;	// the right operand
};

3、模板类binder2nd模板基类unary_function的定义:

// TEMPLATE STRUCT unary_function
template<class _Arg, class _Result>
struct unary_function
{	
	// base class for unary functions
	typedef _Arg argument_type;
	typedef _Result result_type;
};

4、仿函数greater的定义

// TEMPLATE STRUCT greater
template<class _Ty = void>
struct greater
{	
	// functor for operator>
	typedef _Ty first_argument_type;
	typedef _Ty second_argument_type;
	typedef bool result_type;

	constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
	{	
		// apply operator> to operands
		return (_Left > _Right);
	}
};

参考:https://www.cnblogs.com/ggzone/p/4052441.html
https://www.cnblogs.com/runnyu/p/6010101.html
https://blog.youkuaiyun.com/wk_bjut_edu_cn/article/details/80004279

count_if的用法:https://blog.youkuaiyun.com/m0_38033475/article/details/79561369

侯捷C++ stl体系结构与源码剖析:函数适配器详解,C++11新特性bind 函数适配器,是去修饰函数,然后还要表现出函数的性质。所以最终还是要重载(),以表现出函数。 binder2nd来绑定第二个参数,之前less是x<y,现在是x<40。less< int>()是创建了一个函数对象,不是调用。 bind2nd调用了binder2nd,那么最终的效果是less< int>()传进去变成op,40传进去变成value。 bind2nd调用过程,重点: 当执行pred(*first)调用的是operator()这个小括号重载函数,才真正调用了le 阅读详情

相关推荐

C++ STL源码分析——适配器之仿函数适配器 bind2nd 以及 bind

【侯捷-SL体系结构内核分析-适配器】 bind2nd 为二元函数适配器,指定二元函数的第二个参数,将二元函数转变为一元函数。比如下面这个例子: int main() { vector<int> vec = vector<int>{ 4, 5 ,6 ,3, 5 ,8 ,3 }; int count = count_if(vec.begin(), vec.end(), b...

ZLP_优快云的博客 523

C++ bind2nd用法

bind1st和bind2nd是将二元函数转换为一元函数,比如一个比较大小的函数是二元函数,当在某些情况下我们想要固定第一个参数或者第二个参数时吗,就成了一元函数,先看用法 // Created by 开机烫手 on 2018/7/24. #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; ...

Fearless的博客 1万+

Unity获取透明物体深度数据

Unity获取透明物体深度数据前言透明&景深需求模型透明度部分带透明通道图片/视频部分半透明模型获取深度的具体实现方法带透明度图片/视频获取深度的具体实现方法结束语 前言 最近在做的项目有很多奇怪的需求,甚至之前在unity里用插件写了一个类似于蓝图的行为树插件,之后有时间给大家讲一讲相关的实现方法,今天刚解决了unity里透明物体无法获得深度数据的问题。所以分享给大家。 透明&景...

可以吃的妙脆角的博客 2630

C++语法|bind1st和bind2nd的用法

bind1st 和bind2nd分别是一个用来绑定函数对象的第一个参数或第二个参数的适配器。它在 C++98 和 C++03 标准中很常用,但从 C++11 开始,这个功能已经被认为是过时的(deprecated),并在后续的 C++17 标准中被完全移除。绑定器 + 二元函数对象 ==> 一元函数对象他俩只能应用于二元函数对象。

糖炒栗子 1097

银河麒麟V10离线升级OpenSSH实战:从编译到回滚全流程

OpenSSH作为Linux系统远程登录的核心组件,其版本升级直接关系到系统安全与等保合规。在信创环境下,银河麒麟V10自带的OpenSSH版本往往无法满足漏洞扫描与安全加固要求,而离线编译升级涉及依赖处理、编译参数、服务替换与回滚方案等多个技术环节。本文围绕银河麒麟V10(x86_64)平台,详细讲解OpenSSH离线升级的完整实操流程,包括环境摸底、依赖包安装、源码编译、配置文件兼容性处理、服务重启验证以及常见问题排查,并分享批量升级与安全加固的工程经验,帮助运维人员在不断网、不重装的前提下一次成功完成

weixin_30582943的博客 383

WinForm布局

登录模板页面UILoginForm

m0_71541781的博客 469

C++的std::bind1st和std::bind2nd

一、介绍 头文件:fuctional std::bind1st和std::bind2nd函数用于将一个二元算子转换成一元算子。bind的意思是“绑定”,1st代表first,2nd代表second,它们的声明如下:

sinat_31608641的博客 2728

基于深度学习实现实时视频目标检测

实时视频目标检测是计算机视觉领域的研究热点之一,其应用场景包括智能监控、自动驾驶、机器人视觉等多个领域。深度学习技术的快速发展使得实时视频目标检测变得更加可行和准确。本文提出一种基于深度学习实现的实时视频目标检测系统,使用Python和OpenCV作为开发工具,具有高效、准确和实时的特点。 本系统的主要需求是实现实时视频目标检测功能,可以在不同的应用场景中使用。具体的需求如下:2.1 视频输入本系统需要从摄像头或视频文件中获取实时视频流,并对视频流中的目标进行检测和跟踪。2.2 目标检测本系统需要使用深度学

分享毕业设计的案例和论文 1940

浅谈C++绑定器bind1st、bind2nd和函数对象function

今天我们先来谈谈C++ 标准库里面的绑定器bind1stbind2nd和函数对象function。

icc_hhy的博客 1410

基于多时间尺度的电动汽车光伏充电站联合分层优化调度(Matlab代码实现)

该研究提出了一种电动汽车光伏充电站的分层优化调度方法,采用日前-日内两阶段协同优化框架。日前阶段通过混合整数规划对多充电站进行全局优化,以平抑电网波动和降低购电成本为目标;日内阶段基于实时数据,采用NSGA-II等算法动态分配充电功率。该方法实现了光伏高效消纳、成本节约和电网负荷平衡的有效统一。

zhangxd212489的博客 518

MSP430FR6043超声波传感器设计记录

1.前言 最近项目设计了一个超声波传感器 参考TI官方的板子EVM430-FR6043搭建的电路 EVM430-FR6043评估模块是一个用于评估MSP430FR6043 MCU性能的开发平台。 MSP430FR6043 MCU是一款超低功耗器件, 集成了超声波感测模拟前端 用于精确地进行超声波测量。 专为超声波水表、热量计和燃气表而设计, MSP430FR6043 器件采用低功耗加速器 (LEA), 可实现基于高速 ADC 的信号采集以及后续优化数字信号处理, 为电池供电型计量提供了一款超低功耗、高

bingdund的博客 2864

bind2nd(const _Fn2& _Func, const _Ty& _Right) 源码解析

小白,有错欢迎评论执教。 // TEMPLATE FUNCTION bind2nd template<class _Fn2, class _Ty> inline binder2nd<_Fn2> bind2nd(const _Fn2& _Func, const _Ty& _Right) { // return a binder2nd functo...

无知的博客 304

Dify搭建AI测试用例生成器

1、获取产品需求文档2、解读、分析、挖掘需求点,提炼为测试点3、依据测试点,生成详细的测试用例4、输出测试用例1、打开 Dify 控制台,依次点击【工作室】-【ChatFlow】-【创建空白应用】。

十二测试录 1370

STL配接器:

一、配接器定义    配接器没有找到合适的定义,在网上搜到了一下两种说法,作为定义:       配接器是一种设计模式,它在原有类型的基础上扩展成为另一个接口,使原本因为接口不兼容而不能合作的类型可以一起工作。       函数对象直接应用的地方较少,它配合实现一些算法(作为算法的参数),于是便有函数配接器。 二、配接器应用实例 #include #include #incl

kanguolaikanguolaik的专栏 1377

OpenCode + Oh My OpenCode:打造你的终极AI编程团队(OpenCode新手入门指南)

本文详细介绍了开源终端AI编程助手 OpenCode 的完整配置教程 🖥️,从安装、AI模型配置到增强插件 Oh My OpenCode 的部署一应俱全。支持 Claude、ChatGPT、Gemini 多模型切换 🤖,还能实现多AI智能体协作开发。步骤清晰适合新手 📝,想在终端用AI写代码的开发者不要错过 ✨

XiaoqiangClub的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++STL 体系结构与内核分析(侯捷)——课程笔记(十三)

这部分开始适配器的讲解,讲适配器之前还讲了仿函数,但由于比较简单,所以这里简单提一下仿函数。 仿函数就是具有函数特性的class,主要是为算法服务的。STL中有三类仿函数,算术类、逻辑类和相对关系类,下面举几个例子: //算术类 template <class T> struct plus : public binary_function<T, T, T> { T operator()(const T& x, const T& y) const

NiuYutao的博客 308

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++算法包学习

C++算法包学习

qq_34606099的博客 563

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STL学习笔记(5)- STL的函数适配器bind1st和bind2nd

文章目录1. bind1st2. bind2nd bind1st 是将一个二元函数的第一个参数绑定为固定值的函数(实质上是仿函数类) bind2nd 是将一个二元函数的第二个参数绑定为固定值的函数(实质上是仿函数类) 他们再使用的时候都需要加上头文件<functional> 1. bind1st 下面是一个关于 bind1st 的简单示例: #include <iost...

不会飞的纸飞机的博客 687

bind1st、bind2nd源码分析

概述 bind1st 和 bind2nd 函数把一个二元函数对象绑定成为一个一元函数对象。但是由于原来的二元函数对象接受两个参数,在绑定成为一元函数对象时需要将原来两个参数中的一个绑定下来,也就是通过绑定二元函数对象的一个参数使之成为一元函数对象的参数。bind1st是绑定第一个参数,bind2nd则是绑定第二个参数。 这也就是说,bind1st 和 bind2nd 函数把less&lt;in...

wk_bjut_edu_cn的博客 736

C++11中的std::bind

文章转载自:http://www.jellythink.com/archives/773 看看这段代码 这几天学习Cocos2d-x,看到了以下的一段代码: // new callbacks based on C++11 #define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__tar...

大猪的博客 8万+

【C++】一文解析std::binary_function、std::bind1st、std::bind2nd、std::bind

STL中有一个叫做“适配器”的概念,它指的是某些函数可能定义了两个形参,但是某些算法需要的函数却有时候需要一个形参,那么就需要对其进行适配,将原本只需要两个参数的函数转变成需要1和参数就能正常运行的函数。就像你为你的笔记本充电,能直接一根火线一根零线直接接在你的电脑上吗?肯定也是需要一个适配器将国内标准电压转化成笔记本需要的额定电压。“适配器”就是由此而来。

Friday 1188

【手撕代码】手动实现一个bind1st和bind2nd绑定器

// 08 C++绑定器和函数对象.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。 // #include “pch.h” #include #include #include #include #include using namespace std; #if 0 /* 绑定器和函数对象operator() 1.C++ STL中的绑定器 bind1st : o...

weixin_42226134的博客 388

函数适配器:bind2nd

1.bind2nd使用 2.bind2nd源码 template inline binder2nd bind2nd(const Operation& op, const T& x) {     typedef typename Operation::second_argument_type arg2_type;     return binder2nd(op, arg2_ty

INGNIGHT的专栏 484

从零开始学C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例

一、适配器 三种类型的适配器: 容器适配器:用来扩展7种基本容器,利用基本容器扩展形成了栈、队列和优先级队列 迭代器适配器:(反向迭代器、插入迭代器、IO流迭代器) 函数适配器:函数适配器能够将仿函数和另一个仿函数(或某个值、或某个一般函数)结合起来。 针对成员函数的函数适配器 针对一般函数的函数适配器 二、函数适配器示例  C++ Co

Meditation 5680

STL源码分析——函数适配器binder2nd以及函数适配器辅助函数bind2nd

template<class Operation> class my_binder2nd//仿函数适配器functor adapter :public unary_function<typename Operation::first_argument_type, typename Operation::second_argument_type> { protected:...

ShenHang_的博客 340
上一篇: c++消息映射到处理函数(类似表驱动或者消息映射)
下一篇: 关于 STL 的 remove_if
hp_cpp
博客等级 码龄11年 310粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值