C++STL總結筆記(二)——仿函數(函數對象)

文章目錄

  • 一、概念
  • 總結


一、概念

仿函數又稱函數對象,即重載了函數調用運算符()的類的對象。
優勢:
1.仿函數對象的內部可以有自己的狀態,可以實現一些其他的功能。
2.函數對象可以作為參數進行傳遞。

當仿函數類內重載的返回值是bool類型被稱為謂詞,形參為1個為1元謂詞,2個是2元謂詞。

class Compare
{
public:Compare(){n = 0;}//一元謂詞bool operator()(int a){n++;return a > 5;	}//二元謂詞bool operator()(int a, int b){n++;return a > b;	}int n;
};bool Print(Compare& c, int a, int b)
{return c(a, b);
}int main()
{Compare c;//函數對象//調用重載()cout << c(1, 2) << endl;cout << c(3, 2) << endl;cout << c(2, 1) << endl;//可實現計數功能cout << c.n << endl;//作為參數傳遞cout << Print(c, 3, 6) << endl;system("pause");
}
0
1
1
3
0

STL里內置了一些仿函數類型,包括算術仿函數、關系仿函數、邏輯仿函數。

算數仿函數包括+,-,*,/, 取模,取反。

#include<iostream>
#include<string>
#include<functional>//STL內部函數對象頭文件
using namespace std;int main()
{//算術仿函數//加法plus<int>a;cout << a(1, 2) << endl;//減法minus<int>a1;cout << a1(1, 2) << endl;//乘法multiplies<int>a2;cout << a2(1, 2) << endl;//除法divides<int>a3;cout << a3(2, 1) << endl;//取反仿函數negate<int>b;cout << b(1) << endl;//取模仿函數modulus<int>c;cout << c(3,2) << endl;system("pause");
}
3
-1
2
2
-1
1

關系仿函數包括>,<,=,<=,>=,!=。

#include<iostream>
#include<string>
#include<list>
#include<functional>//STL內部函數對象頭文件
using namespace std;int main()
{list<int>L;//插入L.push_back(1);L.push_back(2);list<int>L1;L1 = L;//內置的關系仿函數,大于//L.sort(greater<int>());//小于//L.sort(less<int>());//小于等于L.sort(greater_equal<int>());for (list<int>::iterator i = L.begin(); i != L.end(); i++){cout << *i <<  endl;}system("pause");
}

邏輯運算符包括與或非。

	list<bool>L1;L1.push_back(true);L1.push_back(false);for (list<bool>::iterator i = L1.begin(); i != L1.end(); i++){cout << *i << endl;}list<bool>L2;L2.resize(L1.size());transform(L1.begin(), L1.end(), L2.begin(),logical_not<bool>());for (list<bool>::iterator i = L2.begin(); i != L2.end(); i++){cout << *i << endl;}

總結

對于簡單的容器之間的運算可以使用內置的仿函數,如果想自定義更復雜的仿函數,就需要自己構建仿函數類。

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

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

相關文章

【圖像處理】——灰度變換心得(cv2.normalize規范化值0-255,cv2.convertScaleAbs(new_img)轉為8位圖)

目錄 一、灰度變換函數 對數變換 加碼變換 常見雷點 常見灰度變換函數

SQL Server2008 表旋轉(pivot)技術

參考資料&#xff1a; http://www.cnblogs.com/xiashengwang/p/3503554.html轉載于:https://www.cnblogs.com/lihuali/p/6014776.html

const和define 區別

1&#xff1a; 編譯器處理不同 define宏是在預處理階段展開&#xff0c;const常量是編譯運行階段使用。 2&#xff1a;類型和安全檢查不同 const常量有數據類型&#xff0c;而宏常量沒有數據類型&#xff0c;僅僅是展開。編譯器可以對前者進行類型安全檢查&#xff0c;而對后者…

學習筆記(三)

一.調試模式 define(APP_DEBUG, true); 調試模式的優勢在于&#xff1a; 開啟日志記錄&#xff0c;任何錯誤信息和調試信息都會詳細記錄&#xff0c;便于調試&#xff1b;  關閉模板緩存&#xff0c;模板修改可以即時生效&#xff1b;  記錄SQL日志&#xff0c;方便分析SQL…

【項目實戰】——Python打包正裝換底色代碼為exe文件(可在其他無Python環境下運行)

目錄 1.安裝pyinstaller 2.生成.exe文件 方法1&#xff1a; 方法2&#xff1a; 方法3&#xff1a; &#xff08;1&#xff09;使用命令行窗口進入項目的根目錄 &#xff08;2&#xff09;在改目錄下執行pyi-makespec main.py&#xff08;main.py是你的主入口文件&#x…

C++STL總結筆記(三)—— 常見算法

文章目錄一、基本概念二、程序示例1.遍歷2. 查找3. 排序、拷貝、替換4. numeric相關算法總結一、基本概念 算法是STL中很重要的一部分&#xff0c;其功能包括比較&#xff0c;查找&#xff0c;排序&#xff0c;交換&#xff0c;遍歷&#xff0c;復制等等。 最大的算法頭文件是…

Java zip解壓,并遍歷zip中的配置文件 .cfg或.properties

1.解析cfg或properties配置文件 講配置文件&#xff0c;讀取&#xff0c;并封裝成為map類型數據 /*** 解析cfg文件** param cfgFile* return*/public static Map<String, Object> readCfg(FileInputStream cfgFile) {Properties prop new Properties();Map<String, O…

db2 常用配置

db2set配置&#xff1a; db2set DB2_ENABLE_LDAPNO db2set DB2_ALTERNATE_GROUP_LOOKUPGETGROUPLIST db2set DB2_RESTORE_GRANT_ADMIN_AUTHORITIESON db2set DB2_SKIPINSERTEDON db2set DB2_LOAD_COPY_NO_OVERRIDENONRECOVERABLE db2set DB2_EVALUNCOMMITTEDON db2set DB2_SKIP…

安裝完最小化 RHEL/CentOS 7 后需要做的 30 件事情(三)碼農網

12. 安裝 Apache Tomcat Tomcat 是由 Apache 設計的用來運行 Java HTTP web 服務器的 servlet 容器。按照下面的方法安裝 tomcat&#xff0c;但需要指出的是安裝 tomcat 之前必須先安裝 Java。 # yum install tomcat 安裝 Apache Tomcat 安裝完 tomcat 之后&#xff0c;啟動 to…

【圖像處理】——圖像特效處理(馬賽克、圖像融合、毛玻璃等)

參考:https://blog.csdn.net/qq_43328040/article/details/109081414 import cv2 import numpy as np import random#馬賽克:將一定大小窗口的RGB設置成一個顏色 def horseBox(img):row,col,chal = img.shapeboxRow = int(0.3*row)boxcol = int(0.3*col)for m in range(50,b…

JDK5.0新特性之:泛型

文/陳剛 2005-11-09 一、前言 泛型這個詞在現在的JAVA挺時髦&#xff0c;光從字面上你是無法知道它代表些什么東東的&#xff0c;所以我們還是不要從字面去理解&#xff0c;而是從一些實例去了解它吧。 二、泛型之前的日子 &#xff2a;&#xff24;&#xff2b;&#xff11;.…

QT5.14.2基于PCL1.11.1顯示點云(基于Windows VS2019開發環境)

文章目錄一、安裝1.1 PCL安裝1.2 QT安裝1.3 VTK編譯二、程序配置1. 基于mscv創建QT的程序2. 配置QT工程文件和依賴項3. 編寫點云顯示的小程序總結一、安裝 1.1 PCL安裝 PCL1.11.1庫的安裝網上教程很多&#xff0c;推薦一個很好的教程&#xff1a; Win10 系統下 VisualStudio2…

Spring學習筆記—最小化Spring XML配置

自動裝配(autowiring)有助于減少甚至消除配置<property>元素和<constructor-arg>元素&#xff0c;讓Spring自動識別如何裝配Bean的依賴關系。 自動檢測(autodiscovery)比自動裝配更進了一步&#xff0c;讓Spring能夠自動識別哪些類需要被配置成Spring Bean&#xf…

【數據結構】——快速排序

目錄 一、代碼 二、復雜度&#xff1a;O(nlog(n)) 三、快速排序的劣勢 視頻參考鏈接&#xff1a;https://www.bilibili.com/video/BV1mp4y1D7UP?p17 一、代碼 思想&#xff1a;假設是對一個list進行排序 1、選取第一個元素作為p元素&#xff1b; 2、將p元素歸位&#xff0…

讀取數據庫信息構建視圖字段的備注信息,方便程序代碼生成

在很多情況下&#xff0c;我們開發都需要有一個快速的代碼生成工具用來提高開發效率&#xff0c;代碼生成工具很多信息都是讀取數據庫的表、視圖等元數據進行對象表信息的完善&#xff0c;有了這些信息&#xff0c;我們就可以在普通的實體類代碼里面添加屬性字段的中文注釋&…

Ubuntu DNS bind9 配置

下面的配置就是實現解析test.zp.com到不同的IP地址 安裝dns server軟件包$ apt-get install bind9 配置dns配置文件的路徑在/etc/bind路徑下面添加一個zone$ /etc/bind# vim /etc/bind/named.conf.local 添加下面&#xff0c;語法可以參照/etc/bind/zones.rfc1918中的語法添加&…

微博分享錯誤

昨天再做這塊的時候&#xff0c;不知怎么的點擊之后什么反應都沒有&#xff0c;程序也沒有崩&#xff0c;日志倒是輸出了這個錯誤 解決辦法&#xff1a;打開你寫分享的代碼跟API文檔對比一下創建文本、圖片或者網頁的時候是不是少寫了那個屬性&#xff0c;我這里是在創建網頁的…

C++總結筆記(十二)—— 智能指針

文章目錄前言一、智能指針是什么&#xff1f;二、示例總結前言 C對于內存管理的要求很高&#xff0c;如果不及時釋放對象內存&#xff0c;就可能會發生內存泄露或野指針等情況&#xff0c;鑒于這種情況&#xff0c;C11提出了智能指針的概念。 一、智能指針是什么&#xff1f;…

代碼生成工具之界面快速生成

界面開發&#xff0c;無論對于Web開發&#xff0c;還是Winform開發&#xff0c;都需要耗費一定的時間&#xff0c;特別對于一個數據庫字段比較多的界面&#xff0c;一般就需要在編輯界面上擺的更多的控件來做數據顯示&#xff0c;每次碰到這個&#xff0c;都有點頭痛&#xff0…

javascript - 封裝原生js實現ajax

1 /*2 * ajax方法3 */4 var Ajax function() {5 var that this;6 //創建異步請求對象方法7 that.createXHR function() {8 if(window.XMLHttpRequ…