STL-函數對象

1.函數對象

1.1 概念

重載函數調用操作符的類,其對象被稱為函數對象

函數對象使用重載的()時,行為類似函數調用,也成為仿函數

本質:函數對象(仿函數)是一個類,不是一個函數

1.2 函數對象的使用

在使用時可以像普通函數一樣調用,可以有參數和返回值

函數對象可以有自己的狀態

函數對象可以作為參數傳遞

#include <iostream>
#include <vector>using namespace std;class Myadd{public:int operator()(int x,int y){return x+y;}
};void test1(){Myadd ma;cout<<ma(10,10)<<endl;
}//可以有自己的狀態
class MyPrint{public: MyPrint(){count=0;}void operator()(string test){cout<<test<<endl;count++;}int count;
};void test2(){MyPrint mp;mp("hello world");mp("hello world");mp("hello world");cout<<"調用了"<<mp.count<<"次"<<endl;
}// 可以作為參數傳遞
void DoPrint(MyPrint &mp,string test){mp(test);
}void test3(){MyPrint mp;DoPrint(mp,"hello world");
}int main()
{test1();test2();test3();system("pause");return 0;
}

?2.謂詞

2.1 概念:

返回bool類型的仿函數稱為謂詞

如果operator()接收一個參數成為一元謂詞

如果operator()接收兩個參數成為二元謂詞

2.2 一元謂詞

一元謂詞(Unary Predicate)?是一個接受一個參數并返回布爾值(true?或?false?的函數對象或函數。
其核心作用是:對單個輸入值進行條件判斷,返回是否滿足特定條件。

#include <iostream>
#include <vector>
#include<algorithm>using namespace std;struct CreateFive{bool operator()(int x){return x>5;}
};void test(){vector<int> v;for(int i=0;i<10;i++){v.push_back(i);}vector<int>::iterator it = find_if(v.begin(),v.end(),CreateFive());// 查找滿足CreateFive的元素,指向第一個滿足條件的位置if (it==v.end()){cout<<"沒有大于5的元素"<<endl;}else{cout<<*it<<endl;//只輸出一個6}
}int main()
{test();system("pause");return 0;
}

2.3 二元謂詞

二元謂詞(Binary Predicate)?是一個接受兩個參數并返回布爾值(true?或?false?的函數對象或函數。
其核心作用是:對兩個輸入值進行條件判斷,返回是否滿足特定關系。

#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;class MyCompare{public:bool operator()(int v1,int v2){return v1>v2;}// 這個函數接受兩個參數(v1 和 v2),返回一個布爾值(true 或 false),// 表示 v1 是否大于 v2。
};void test(){vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);sort(v.begin(),v.end());for(vector<int>::iterator it=v.begin();it!=v.end();it++){cout<<*it<<" ";   }cout<<endl;//改變排序順序sort(v.begin(),v.end(),MyCompare());for(vector<int>::iterator it=v.begin();it!=v.end();it++){cout<<*it<<" ";   }cout<<endl;}int main()
{test();system("pause");return 0;
}

3.內建函數對象

3.1意義

STL內建了一些函數對象

需要在頭文件#include<functional>

3.2算數仿函數

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;//negate
void Negate(){negate<int> n;cout<<n(10)<<endl;
}void Add(){plus<int> p;cout<<p(10,20)<<endl;
}int main()
{Negate();Add();system("pause");return 0;
}

3.3關系仿函數

實現關系對比

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 less<T>// 小于

template<class T> bool greater_equal<T>// 大于等于

template<class T> bool less_equal<T>// 小于等于

#include <iostream>
#include <vector>
#include<functional>
#include<algorithm>using namespace std;class MyCompare{public:bool operator()(int x,int y){return x>y;}
};void test(){vector<int> v;v.push_back(10);v.push_back(80);v.push_back(30);v.push_back(50);v.push_back(70);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()
{test();system("pause");return 0;
}

3.4邏輯仿函數

template<class T> bool logical_and<T>// 邏輯與

template<class T> bool logical_or<T>// 邏輯或

template<class T> bool logical_not<T>// 邏輯非

#include <iostream>
#include <vector>
#include<functional>
#include<algorithm>using namespace std;void test(){vector<bool> v;v.push_back(true);v.push_back(false);v.push_back(true);v.push_back(false);for(auto it=v.begin();it!=v.end();it++){cout<<*it<<" ";}cout<<endl;vector<bool> v2;v2.resize(v.size());//將v2的大小設置為v的大小transform(v.begin(),v.end(),v2.begin(),logical_not<bool>());//遍歷v,從v2的begin開始,將v的值取反,然后賦值給v2for(auto it=v2.begin();it!=v2.end();it++){cout<<*it<<" ";}cout<<endl;
}int main()
{test();system("pause");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76433.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76433.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76433.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多線程(Java)

注&#xff1a;本文為本人學習過程中的筆記 1.導入 1.進程和線程 我們希望我們的程序可以并發執行以提升效率&#xff0c;此時引入了多進程編程。可是創建進程等操作開銷太大&#xff0c;于是就將進程進一步拆分成線程&#xff0c;減少開銷。進程與進程之間所涉及到的資源是…

在 Dev-C++中編譯運行GUI 程序介紹(三)有趣示例一組

在 Dev-C中編譯運行GUI程序介紹&#xff08;三&#xff09;有趣示例一組 前期見 在 Dev-C中編譯運行GUI 程序介紹&#xff08;一&#xff09;基礎 https://blog.csdn.net/cnds123/article/details/147019078 在 Dev-C中編譯運行GUI 程序介紹&#xff08;二&#xff09;示例&a…

【高校主辦】2025年第四屆信息與通信工程國際會議(JCICE 2025)

重要信息 會議網址&#xff1a;www.jcice.org 會議時間&#xff1a;2025年7月25-27日 召開地點&#xff1a;哈爾濱 截稿時間&#xff1a;2025年6月15日 錄用通知&#xff1a;投稿后2周內 收錄檢索&#xff1a;EI,Scopus 會議簡介 JCICE 2022、JCICE 2023、JCICE 2…

【Linux】Linux 操作系統 - 03 ,初步指令結尾 + shell 理解

文章目錄 前言一、打包和壓縮二、有關體系結構 (考)面試題 三、重要的熱鍵四、shell 命令及運行原理初步理解五、本節命令總結總結 前言 本篇文章 , 筆者記錄的筆記內容包含 : 基礎指令 、重要熱鍵 、shell 初步理解 、權限用戶的部分問題 。 內容皆是重要知識點 , 需要認真理…

Python: sqlite3.OperationalError: no such table: ***解析

出現該錯誤說明數據庫中沒有成功創建 reviews 表。以下是完整的解決方案: 步驟 1:創建數據庫表 在插入數據前,必須先執行建表語句。請通過以下任一方式創建表: 方式一:使用 SQLite 命令行 bash 復制 # 進入 SQLite 命令行 sqlite3 reviews.db# 執行建表語句 CREATE T…

VSCode CLine 插件自定義配置使用 Claude 3.7 模型進行 AI 開發

一個互聯網技術玩家&#xff0c;一個愛聊技術的家伙。在工作和學習中不斷思考&#xff0c;把這些思考總結出來&#xff0c;并分享&#xff0c;和大家一起交流進步。 本文介紹如何在 Visual Studio Code (VSCode) 中安裝和自定義配置 CLine 插件&#xff0c;并使用 Claude 3.7 模…

【VSCode配置】運行springboot項目和vue項目

目錄 安裝VSCode安裝軟件安裝插件VSCode配置user的全局設置setting.jsonworkshop的項目自定義設置setting.jsonworkshop的項目啟動配置launch.json 安裝VSCode 官網下載 安裝軟件 git安裝1.1.12版本&#xff0c;1.2.X高版本無法安裝node14以下版本 nvm安裝&#xff08;github…

linux shell編程之條件語句(二)

目錄 一. 條件測試操作 1. 文件測試 2. 整數值比較 3. 字符串比較 4. 邏輯測試 二. if 條件語句 1. if 語句的結構 (1) 單分支 if 語句 (2) 雙分支 if 語句 (3) 多分支 if 語句 2. if 語句應用示例 (1) 單分支 if 語句應用 (2) 雙分支 if 語句應用 (3) 多分支 …

榕壹云在線商城系統:基于THinkPHP+ Mysql+UniApp全端適配、高效部署的電商解決方案

項目背景&#xff1a;解決多端電商開發的痛點 隨著移動互聯網的普及和用戶購物習慣的碎片化&#xff0c;傳統電商系統面臨以下挑戰&#xff1a; 1. 多平臺適配成本高&#xff1a;需要同時開發App、小程序、H5等多端應用&#xff0c;重復開發導致資源浪費。 2. 技術依賴第三方…

神經動力學系統與計算及AI拓展

大腦&#xff0c;一個蘊藏在我們顱骨之內的宇宙&#xff0c;以活動脈動&#xff0c;如同由電信號和化學信號編織而成的交響樂&#xff0c;精巧地協調著思想、情感和行為。但是&#xff0c;這種復雜的神經元舞蹈是如何產生我們豐富多彩的精神生活的呢&#xff1f;這正是神經動力…

K8s常用基礎管理命令(一)

基礎管理命令 基礎命令kubectl get命令kubectl create命令kubectl apply命令kubectl delete命令kubectl describe命令kubectl explain命令kubectl run命令kubectl cp命令kubectl edit命令kubectl logs命令kubectl exec命令kubectl port-forward命令kubectl patch命令 集群管理命…

本地化部署DeepSeek-R1蒸餾大模型:基于飛槳PaddleNLP 3.0的實戰指南

目錄 一、飛槳框架3.0&#xff1a;大模型推理新范式的開啟1.1 自動并行機制革新&#xff1a;解放多卡推理1.2 推理-訓練統一設計&#xff1a;一套代碼全流程復用 二、本地部署DeepSeek-R1-Distill-Llama-8B的實戰流程2.1 機器環境說明2.2 模型與推理腳本準備2.3 啟動 Docker 容…

單片機方案開發 代寫程序/燒錄芯片 九齊/應廣等 電動玩具 小家電 語音開發

在電子產品設計中&#xff0c;單片機&#xff08;MCU&#xff09;無疑是最重要的組成部分之一。無論是消費電子、智能家居、工業控制&#xff0c;還是可穿戴設備&#xff0c;小家電等&#xff0c;單片機的應用無處不在。 單片機&#xff0c;簡而言之&#xff0c;就是將計算機…

【位運算】兩整數之和

文章目錄 371. 兩整數之和解題思路&#xff1a;位運算 371. 兩整數之和 371. 兩整數之和 ? 給你兩個整數 a 和 b &#xff0c;不使用 運算符 和 - &#xff0c;計算并返回兩整數之和。 示例 1&#xff1a; 輸入&#xff1a;a 1, b 2 輸出&#xff1a;3示例 2&#xff1…

使用Python從零實現一個端到端多模態 Transformer大模型

嘿&#xff0c;各位&#xff01;今天咱們要來一場超級酷炫的多模態 Transformer 冒險之旅&#xff01;想象一下&#xff0c;讓一個模型既能看懂圖片&#xff0c;又能理解文字&#xff0c;然后還能生成有趣的回答。聽起來是不是很像超級英雄的超能力&#xff1f;別急&#xff0c…

新聞推薦系統(springboot+vue+mysql)含萬字文檔+運行說明文檔

新聞推薦系統(springbootvuemysql)含萬字文檔運行說明文檔 該系統是一個新聞推薦系統&#xff0c;分為管理員和用戶兩個角色。管理員模塊包括個人中心、用戶管理、排行榜管理、新聞管理、我的收藏管理和系統管理等功能。管理員可以通過這些功能進行用戶信息管理、查看和編輯用…

游戲引擎學習第218天

構建并運行&#xff0c;注意一下在調試系統關閉前人物的移動速度 現在我準備開始構建項目。如果我沒記錯的話&#xff0c;我們之前關閉了調試系統&#xff0c;主要是為了避免大家在運行過程中遇到問題。現在調試系統沒有開啟&#xff0c;一切運行得很順利&#xff0c;看到那個…

基于混合編碼器和邊緣引導的拉普拉斯金字塔網絡用于遙感變化檢測

Laplacian Pyramid Network With HybridEncoder and Edge Guidance for RemoteSensing Change Detection 0、摘要 遙感變化檢測&#xff08;CD&#xff09;是觀測和分析動態土地覆蓋變化的一項關鍵任務。許多基于深度學習的CD方法表現出強大的性能&#xff0c;但它們的有效性…

Go語言從零構建SQL數據庫(6) - sql解析器(番外)- *號的處理

番外&#xff1a;處理SQL通配符查詢 在SQL中&#xff0c;SELECT * FROM table是最基礎的查詢之一&#xff0c;星號&#xff08;*&#xff09;是一個通配符&#xff0c;表示"選擇所有列"。雖然通配符查詢看起來簡單&#xff0c;但在解析器中需要特殊處理。下面詳細介…

淺析Centos7安裝Oracle12數據庫

Linux下的Oracle數據庫實在是太難安裝了&#xff0c;事賊多&#xff0c;我都懷疑能安裝成功是不是運氣的成分更高一些。這里操作系統是Centos7&#xff0c;Oracle版本是Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production。 Oracle下載鏈接: https…