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

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

C++ 绑定器和函数对象

一、绑定器

虽然在C++11标准中这两个绑定函数已经被弃用,但仍然值得我们深入思考其底层原理。从字面上理解,“绑定” 这两个字表明它可能将某个类型或值直接关联到了某个特定的 “位置” 上,其定义可以被概括为:

  • 🐶bind1st函数接受一个二元函数和一个值,返回一个新的函数对象,该函数对象将被绑定到二元函数的第一个参数上。这意味着第二个参数可以在调用时提供,而第一个参数是预先绑定的。

  • 🐱bind2nd函数接受一个二元函数和一个值,返回一个新的函数对象,该函数对象将被绑定到二元函数的第二个参数上。这意味着第一个参数可以在调用时提供,而第二个参数是预先绑定的。

简而言之,bind1st 把函数对象 operator() 重载函数的第一个形参变量绑定成一个确定的值,而bind2nd 函数则是把第二个形参变量绑定成一个确定的值。下面我们给出一个简单的示例来加深理解:

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

template<typename T>
void show_all(T& val)  //通用函数模板,用来输出所有元素
{
   
	typename T::iterator it = val.begin();
	while (it != val.end())
	{
   
		cout << *it << " "; 
		it++;
	}
}

int main()
{
   
	srand(time(NULL));
	vector<int> v;
	for (int i = 0; i < 20; i++)
		v.push_back(rand() % 100);
		//v.push_back(rand() % 100 + 50); 一定找不到

	// 使用 bind1st(greater<int>(), 50) 查找第一个大于50的元素
	auto it = find_if(v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leisure-pp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值