【C++】STL 算法 ⑧ ( 预定义函数对象 | 预定义函数对象组成 | 预定义函数对象分类 | 预定义 算术运算符 函数对象 | 预定义 比较运算符 函数对象 | 预定义 逻辑运算符 函数对象 )

这篇具有很好参考价值的文章主要介绍了【C++】STL 算法 ⑧ ( 预定义函数对象 | 预定义函数对象组成 | 预定义函数对象分类 | 预定义 算术运算符 函数对象 | 预定义 比较运算符 函数对象 | 预定义 逻辑运算符 函数对象 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。





一、预定义函数对象



1、预定义函数对象概念


C++ 的 标准模板库 ( STL , Standard Template Library ) 中 , 预定义了一系列的 " 函数对象 “ , 又称为 ” 仿函数 Functors " ;


这些 " 预定义函数对象 " 在 STL 算法中 , 可以 作为 算法的参数 , 定制某些参数的行为 , 如 :

  • for_each 遍历算法中 , 传入 " 一元函数对象 " , 用于执行单个元素的遍历操作 ;
  • find_if 查找算法中 , 传入 " 一元谓词 " , 用于判定某个元素是否符合查找规则 ;
  • transform 变换算法中 , 传入 " 二元函数对象 " , 用于将 2 个范围的元素进行变换操作 ;
  • sort 排序算法中 , 传入 " 二元谓词 " , 用于判定 2 个元素之间的 排序规则 ;

2、预定义函数对象组成


预定义 函数对象 , 是由 调用操作符T 泛型类型 组合使用的 , 以 plus<T> 为例 ,

  • plus 表示这是 " 预定义 算术运算符 函数对象 " ;
  • T 泛型类型 表示 该函数对象 执行的是 什么类型 的操作 ,
    • 如果 T 为 int , 则表示 两个 int 整型值 进行加法操作 ;
    • 如果 T 为 string , 则表示 两个 string 字符串 进行加法操作 ;




二、预定义函数对象分类




预定义函数对象 分为 如下几类 :

  • 预定义 算术运算符 函数对象
  • 预定义 比较运算符 函数对象
  • 预定义 逻辑运算符 函数对象

1、预定义 算术运算符 函数对象


预定义 算术运算符 函数对象 :

  • plus<T> : 加法运算 ;
  • minus<T> : 减法运算 ;
  • multiplies<T> : 乘法运算 ;
  • divides<T> : 除法运算 ;
  • modulus<T> : 取模运算 ;

上述 " 预定义 算术运算符 函数对象 " 都是 二元函数对象 , 通常用于 transform 变换算法 , accumulate 累加和算法 , 等算法中 ;


2、预定义 比较运算符 函数对象


预定义 比较运算符 函数对象 :

  • equal_to<T> : 判断两个值是否相等 ;
  • not_equal_to<T> : 判断两个值是否不相等 ;
  • greater<T> : 判断第一个值是否大于第二个值 ;
  • less<T> : 判断第一个值是否小于第二个值 ;
  • greater_equal<T> : 判断第一个值是否大于或等于第二个值 ;
  • less_equal<T> : 判断第一个值是否小于或等于第二个值 ;

这些 函数对象 都是 二元谓词 , 通常用于 sort 排序算法 , find_if 查找算法 等算法中 ;


3、预定义 逻辑运算符 函数对象


预定义 逻辑运算符 函数对象 :

  • logical_and<T> : 逻辑与运算 ;
  • logical_or<T> : 逻辑或运算 ;
  • logical_not<T> : 执行逻辑非运算 ; logical_not 函数对象 通常不直接用于算法中 , 而是用于构造其他函数对象 ;




三、代码示例 - plus 函数对象使用




1、plus 函数对象


plus 函数对象原型如下 :

// STRUCT TEMPLATE plus
template <class _Ty = void>
struct plus {
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty result_type;

    constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {
        return _Left + _Right;
    }
};

其重载的 " 函数调用操作符 () " 函数原型如下 :

    constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {
        return _Left + _Right;
    }

上述函数 , 接收 2 个 T 类型函数 , 将这两个函数相加 , 并返回相加的结果 ;


2、代码示例


代码示例 :

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

int main() {


	// I . int 类型相加


	// 创建 plus 函数对象实例
	plus<int> intPlus;

	// 定义传入 plus 函数对象的参数
	int a = 222;
	int b = 666;
	
	// 执行 plus 函数对象
	int c = intPlus(a, b);

	// 打印 plus 函数对象执行结果
	cout << "c = " << c << endl;


	// II . string 类型相加


	// 创建 plus 函数对象实例
	plus<string> stringPlus;

	// 定义传入 plus 函数对象的参数
	string s1 = "Hello";
	string s2 = "World";

	// 执行 plus 函数对象
	string s = stringPlus(s1, s2);

	// 打印 plus 函数对象执行结果
	cout << "s = " << s << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
	return 0;
};

3、执行结果


执行结果 :

c = 888
s = HelloWorld
请按任意键继续. . .

【C++】STL 算法 ⑧ ( 预定义函数对象 | 预定义函数对象组成 | 预定义函数对象分类 | 预定义 算术运算符 函数对象 | 预定义 比较运算符 函数对象 | 预定义 逻辑运算符 函数对象 ),C++,c++,算法,stl,预定义函数对象,仿函数,预定义算术运算符函数对象,stl算法文章来源地址https://www.toymoban.com/news/detail-793217.html

到了这里,关于【C++】STL 算法 ⑧ ( 预定义函数对象 | 预定义函数对象组成 | 预定义函数对象分类 | 预定义 算术运算符 函数对象 | 预定义 比较运算符 函数对象 | 预定义 逻辑运算符 函数对象 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包