STL中的二元函数binary_function

原创 2017年06月06日 11:03:52

      

       函数对象是重载了operator()的类的一个实例,operator()是函数调用运算符。

标准C++库根据operator()参数个数加以划分,主要有以下几种类型:

       1  发生器:一种没有参数且返回一个任意类型值的函数对象,例如随机数发生器。

       2  一元函数:一种只有一个任意类型的参数,且返回一个可能不同类型值的函数对象。

       3  二元函数:一种有两个任意类型的参数,且返回一个可能不同类型值的函数对象。

       4  一元判定函数:返回bool型值的一元函数。

       5  二元判定函数:返回bool型值的二元函数。


     样例

     //1   一个自定义类型

     

#include <string>
#include <iostream>
using namespace std;

class Student
{
public:
	Student(void);
	~Student(void);

public:
	string _stuName;
	float  _stuScore;

public:
	Student(string stuName,float stuScore)
	{
		_stuName=stuName;
		_stuScore=stuScore;
	}

	//布尔运算符重载
	bool operator <(const Student& stu)
	{
		return _stuScore<stu._stuScore;
	}

	//()运算符重载
	void operator()(const Student& stu)
	{
		cout<<stu._stuName<<"  "<<stu._stuScore<<endl;
	}


};
 

//2  重载系统二元函数

#pragma once
#include <functional>
using namespace std;


//不能有构造函数
template <class inPara , class outPara>
class binary_sort:public binary_function<inPara,outPara,bool>
{
public:
	bool operator()(inPara in1,outPara in2)
	{
		return in1<in2;
	}
};

//3  使用样例

 

#include "stdafx.h"

#include <string>
#include <vector>
#include <iostream>
#include <functional>
#include <algorithm>

#include "Student.h"
#include "binary_sort.h"


int _tmain(int argc, _TCHAR* argv[])
{

	vector<Student>v;

	//向量赋值
	Student s1("11111",67);
	v.push_back(s1);

	Student s2("2222",45);
	v.push_back(s2);

	Student s3("33333",78);
	v.push_back(s3);

   //利用函数对象,输出各个元素
   cout<<"before sort()"<<endl;
   for_each(v.begin(),v.end(),Student());


   cout<<"after sort()"<<endl;
   //利用二元判定函数进行排序
   sort(v.begin(),v.end(),binary_sort<Student&,Student&>());

   for_each(v.begin(),v.end(),Student());


	getchar();
	return 0;
}


STL中的仿函数

仿函数是行为类似函数的类或结构体,类或结构体重载了operator(),它比函数指针更加灵活易用。...
  • KangRoger
  • KangRoger
  • 2014年08月19日 14:37
  • 4396

STL学习_仿函数篇

STL学习_仿函数篇 简介仿函数,实质是函数对象,是一种具有函数特质的对象。对调用者,它可以像函数一样地被调用;对被调用者,它可以以对象所定义的function call operator扮演函数的实...
  • yzhang6_10
  • yzhang6_10
  • 2016年05月02日 17:58
  • 2009

STL函数对象之预定义函数对象和函数对象绑定器

STL为我们定义了一些常用的函数对象,如下表。 函数绑定器是函数对象,它能结合函数对象、于特定值或函数在一起使用。它们也是被定义在 . 看下面的例子: find_if (coll.begin...
  • FlowShell
  • FlowShell
  • 2015年02月11日 14:57
  • 679

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

一、适配器 三种类型的适配器: 容器适配器:用来扩展7种基本容器,利用基本容器扩展形成了栈、队列和优先级队列 迭代器适配器:(反向迭代器、插入迭代器、IO流迭代器) 函数适配器:函数适配器能够...
  • Simba888888
  • Simba888888
  • 2013年07月27日 17:34
  • 3584

MATLAB求解二元(多元)函数极值

matlab求解二元函数极值命令: 1、x=fminsearch(fun,x0)或x=fminunc(fun,x0)求极小值点x,初值选为x0 2、[x,fmin]=fminsearch(fun,...
  • cantjie
  • cantjie
  • 2017年04月22日 20:43
  • 1590

二元随机变量函数的分布

在前面的文章记录了二元随机变量的定义、离散型二元随机变量的联合分布律/联合概率密度函数、边际分布律/边际概率密度函数、条件分布律/条件概率密度 ,以及对应的 联合分布函数、边际分布函数、条件分布函数。...
  • flying_all
  • flying_all
  • 2017年04月14日 16:38
  • 568

基于MATLAB和C#编程实现二元函数梯度下降法求极小值

分别用MATLAB和C#编程实现二元函数梯度下降法求极小值
  • weixin_36761349
  • weixin_36761349
  • 2017年11月18日 20:27
  • 156

[C++]高效定义STL比较函数的一些建议

函数与函数子 在STL的使用中,我们经常需要自定义比较函数。本文将介绍如何完成这一类的函数,并且给出可靠而高效的使用建议。 1. mem_fun, ptr_fun, mem_fun_ref m...
  • stary_yan
  • stary_yan
  • 2016年07月18日 14:46
  • 1399

STL之list函数详解

本文主要介绍了list的内部结构,list特殊的能力,以及list所支持操作函数,并在最终给出list应用实例。...
  • xiao3404
  • xiao3404
  • 2016年05月05日 22:18
  • 2044

STL容器与默认拷贝构造函数,默认赋值函数

这两个函数都采用“按成员拷贝”的默认方式来实现。也就是说:它们会依次调用每个数据成员的默认拷贝函数和默认赋值函数,除非为它们显示定义了新的构造函数和赋值函数;如此递归下去,真到所有成员都是基本类型为止...
  • suxinpingtao51
  • suxinpingtao51
  • 2014年08月21日 16:08
  • 2291
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL中的二元函数binary_function
举报原因:
原因补充:

(最多只允许输入30个字)