当前位置: 首页 > news >正文

93.STL-系统内置仿函数

       

目录

 算术仿函数

关系仿函数 

逻辑仿函数 


        C++ 标准库中提供了一些内置的函数对象,也称为仿函数,它们通常位于 <functional> 头文件中。以下是一些常见的系统内置仿函数:

 算术仿函数

功能描述:

  • 实现四则运算
  • 其中negate是一元运算,其他都是二元运算

仿函数原型:

  • template<class T> T plus<T> //加法仿函数
  • template<class T> T minus<T> //减法仿函数
  • template<class T> T multiplies<T> //乘法仿函数
  • template<class T> T divides<T> //除法仿函数
  • template<class T> T modulus<T> //取模仿函数
  • template<class T> T negate<T> //取反仿函数
#include <iostream>
#include <functional>using namespace std;int main() {plus<int> m;//加法仿函数cout << m(10,20) << endl;minus<int> m1;//减法仿函数cout << m1(20, 10) << endl;multiplies<int> m2;//乘法仿函数cout << m2(20, 10) << endl;divides<int> m3;//除法仿函数cout << m3(20, 10) << endl;modulus<int> m4;//取模仿函数cout << m4(20, 8) << endl;negate<int> m5;//取反仿函数cout << m5(20) << endl;return 0;
}

 

关系仿函数 

功能描述:

  • 实现关系对比

仿函数原型:

  • template<class T> bool equal_to<T> //等于
  • template<class T> bool not_equal_to<T> //不等于
  • template<class T> bool greater<T> //大于
  • template<class T> bool greater_equal<T> //大于等于
  • template<class T> bool less<T> //小于
  • template<class T> bool less_equal<T> //小于等于
void test01()
{vector<int> v;v.push_back(10);v.push_back(30);v.push_back(50);v.push_back(40);v.push_back(20);for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;//自己实现仿函数//sort(v.begin(), v.end(), MyCompare());//STL内建仿函数 大于仿函数sort(v.begin(), v.end(), greater<int>());//大于for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
int main() {test01();system("pause");return 0;
}

 

逻辑仿函数 

功能描述:

  • 实现逻辑运算

函数原型:

  • template<class T> bool logical_and<T> //逻辑与
  • template<class T> bool logical_or<T> //逻辑或
  • template<class T> bool logical_not<T> //逻辑非
void test01()
{vector<bool> v;v.push_back(true);v.push_back(false);v.push_back(true);v.push_back(false);for (vector<bool>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;//逻辑非 将v容器搬运到v2中,并执行逻辑非运算vector<bool> v2;v2.resize(v.size());transform(v.begin(), v.end(), v2.begin(), logical_not<bool>());for (vector<bool>::iterator it = v2.begin(); it != v2.end(); it++){cout << *it << " ";}cout << endl;
}
int main() {test01();system("pause");return 0;
}

 

 写在最后:以上就是本篇文章的内容了,感谢你的阅读。如果感到有所收获的话可以给博主点一个赞哦。如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~  

相关文章:

  • Java面向对象第7天
  • 深度学习笔记《一》:keras_core.layers.Conv2D()
  • 插入区间[中等]
  • interface previously declared 的bug问题
  • 代码随想录二刷|第七章:回溯算法
  • 第一章 Python基础
  • 【gpts】学算法题[缺失的第一个正数](https://leetcode.cn/problems/first-missing-positive/)
  • Findreport中框架图使用的注意事项
  • 【迅搜04】索引配置(一)加载配置文件以及服务端配置
  • 第四章 python基础之面向对象
  • YoloV7改进策略:RefConv打造轻量化YoloV7利器
  • 实力登榜!迅镭激光荣膺“江苏省瞪羚企业”称号!
  • 初识操作系统
  • 九、hdfs中Namenode元数据处理
  • SDN核心技术与内容
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Android组件 - 收藏集 - 掘金
  • Angular 响应式表单 基础例子
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Fundebug计费标准解释:事件数是如何定义的?
  • Gradle 5.0 正式版发布
  • JS+CSS实现数字滚动
  • Just for fun——迅速写完快速排序
  • KMP算法及优化
  • Leetcode 27 Remove Element
  • oldjun 检测网站的经验
  • Spring Boot MyBatis配置多种数据库
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 动态魔术使用DBMS_SQL
  • 解决iview多表头动态更改列元素发生的错误
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 小李飞刀:SQL题目刷起来!
  • 一些关于Rust在2019年的思考
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 国内开源镜像站点
  • #define 用法
  • (3)选择元素——(17)练习(Exercises)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Note)C++中的继承方式
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (强烈推荐)移动端音视频从零到上手(上)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (新)网络工程师考点串讲与真题详解
  • (转)人的集合论——移山之道
  • .bashrc在哪里,alias妙用
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET中两种OCR方式对比
  • [Android] Android ActivityManager
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [CCIE历程]CCIE # 20604