国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】STL 算法 ⑩ ( 函數(shù)適配器 | 函數(shù)適配器概念 | 函數(shù)適配器分類 | 函數(shù)適配器輔助函數(shù) | std::bind2nd 函數(shù)原型及示例 | std::bind 函數(shù)原型及示例 )

這篇具有很好參考價(jià)值的文章主要介紹了【C++】STL 算法 ⑩ ( 函數(shù)適配器 | 函數(shù)適配器概念 | 函數(shù)適配器分類 | 函數(shù)適配器輔助函數(shù) | std::bind2nd 函數(shù)原型及示例 | std::bind 函數(shù)原型及示例 )。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。





一、函數(shù)適配器簡介



1、函數(shù)適配器概念


在 STL 中 預(yù)定義了很多 函數(shù)對(duì)象 , 如果要 對(duì) 函數(shù)對(duì)象 的 參數(shù) / 返回值 進(jìn)行 計(jì)算 或 設(shè)置 , 可以 使用 " 函數(shù)適配器 " 實(shí)現(xiàn)上述需求 ;

" 函數(shù)適配器 " 可以 將 已存在的 函數(shù)對(duì)象 轉(zhuǎn)化為 另一種符合要求的 函數(shù)對(duì)象 ;

" 函數(shù)適配器 " 定義在 <functional> 頭文件 中 ;


2、函數(shù)適配器分類


" 函數(shù)適配器 " 常用類型的兩類 :

  • 綁定適配器 :
    • std::bind 綁定適配器 : 引入的一個(gè) 通用綁定機(jī)制 , 可 綁定 函數(shù) / 函數(shù)指針 / 函數(shù)對(duì)象 / 成員函數(shù)指針 任意 位置 的 參數(shù) 到指定的值 , 也可以重新排列參數(shù)的順序 , 或者將多個(gè)可調(diào)用對(duì)象組合在一起 ; C++ 11 最新引入的 , 建議使用 該 綁定適配器 ;
    • std::binder1st 綁定適配器 : 將一個(gè)二元函數(shù)對(duì)象的 第一個(gè) 參數(shù) 綁定到一個(gè)特定的值 , 從而創(chuàng)建一個(gè)新的一元函數(shù)對(duì)象 ; C++ 11 棄用 , 建議使用 std::bind 綁定適配器 ;
    • std::binder2nd 綁定適配器 : 將一個(gè)二元函數(shù)對(duì)象的 第二個(gè) 參數(shù) 綁定到一個(gè)特定的值 , 從而創(chuàng)建一個(gè)新的一元函數(shù)對(duì)象 ; C++ 11 棄用 , 建議使用 std::bind 綁定適配器 ;
  • 組合適配器 :
    • unary_negate 組合適配器 : 將 一元謂詞 的返回值 , 進(jìn)行 邏輯取反 操作 , 得到一個(gè)新的 bool 類型 布爾值 ;
    • binary_negate 組合適配器 : 將 二元謂詞 的返回值 , 進(jìn)行 邏輯取反 操作 , 得到一個(gè)新的 bool 類型 布爾值 ;

3、函數(shù)適配器輔助函數(shù)


函數(shù)適配器 的 創(chuàng)建構(gòu)造 需要很復(fù)雜的類型聲明 , 為了方便開發(fā) , C++ 的 STL 標(biāo)準(zhǔn)模板庫 中提供了 " 函數(shù)適配器輔助函數(shù) " , 可以 無需顯示聲明類型 , 就可以 實(shí)現(xiàn) 函數(shù)適配器 的創(chuàng)建 ;


常用的 " 函數(shù)適配器輔助函數(shù) " :

  • bind1st 函數(shù) : 輔助構(gòu)造 std::binder1st 綁定適配器 實(shí)例對(duì)象 , 可以 為 二元函數(shù) 第一個(gè)參數(shù) 綁定一個(gè)固定的值 ;
  • bind2nd 函數(shù) : 輔助構(gòu)造 std::binder2nd 綁定適配器 實(shí)例對(duì)象 , 可以 為 二元函數(shù) 第二個(gè)參數(shù) 綁定一個(gè)固定的值 ;
  • not1 函數(shù) : 輔助構(gòu)造 unary_negate 組合適配器 實(shí)例對(duì)象 , 將 一元謂詞 的返回值 , 進(jìn)行 邏輯取反 操作 ;
  • not2 函數(shù) : 輔助構(gòu)造 unary_negate 組合適配器 實(shí)例對(duì)象 , 將 二元謂詞 的返回值 , 進(jìn)行 邏輯取反 操作 ;




二、函數(shù)適配器使用示例 - std::bind2nd 函數(shù)



1、std::bind2nd 函數(shù)原型


std::bind2nd 是一個(gè)函數(shù)適配器 , 它用于 生成一個(gè)新的一元函數(shù)對(duì)象 , 該對(duì)象將給定二元函數(shù)對(duì)象的第二個(gè)參數(shù)綁定到一個(gè)特定的值 ;


std::bind2nd 函數(shù)原型如下 :

template <class Operation>  
binder2nd<Operation> bind2nd(const Operation& op, const typename Operation::second_argument_type& value);
  • 參數(shù)解析 :

    • Operation &op 參數(shù) : 該參數(shù)是 要綁定的二元函數(shù)對(duì)象 , 它必須定義 second_argument_type 作為其第二個(gè)參數(shù)的類型 , 也就是說 第二個(gè)參數(shù)類型 需要 與 本函數(shù)的 value 值類型相同 ;
    • value 參數(shù) : 該參數(shù)是 要綁定到二元函數(shù)對(duì)象第二個(gè)參數(shù)的 值 或 變量 ;
  • 返回值解析 : 返回一個(gè) binder2nd 類 的對(duì)象 , 該對(duì)象是一個(gè)一元函數(shù)對(duì)象 , 可以像普通函數(shù)對(duì)象一樣被調(diào)用 ;


2、代碼示例 - std::bind2nd 函數(shù)


代碼示例 :

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

int main() {

	// 創(chuàng)建一個(gè) set 集合容器
	vector<int> myVector;

	// 向容器中插入元素
	myVector.push_back(9);
	myVector.push_back(5);
	myVector.push_back(2);
	myVector.push_back(7);
	myVector.push_back(2);

	// 向 foreach 循環(huán)中傳入 Lambda 表達(dá)式
	for_each(myVector.begin(), myVector.end(), [](int a) {
		std::cout << a << " ";
		});
	cout << endl;

	// 計(jì)算 vector 容器中 , 值為 2 的個(gè)數(shù)
	int equal_num = 2;
	int count = count_if(myVector.begin(), myVector.end(), bind2nd(equal_to<int>(), equal_num));
	cout << "值為 2 的元素個(gè)數(shù) : " << count << endl;

	
	// 控制臺(tái)暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");
	return 0;
};

執(zhí)行結(jié)果 :

9 5 2 7 2
值為 2 的元素個(gè)數(shù) : 2
Press any key to continue . . .

【C++】STL 算法 ⑩ ( 函數(shù)適配器 | 函數(shù)適配器概念 | 函數(shù)適配器分類 | 函數(shù)適配器輔助函數(shù) | std::bind2nd 函數(shù)原型及示例 | std::bind 函數(shù)原型及示例 ),C++,c++,算法,開發(fā)語言,STL,函數(shù)適配器,函數(shù)適配器輔助函數(shù),函數(shù)適配器分類





三、函數(shù)適配器使用示例 - std::bind 函數(shù)



1、std::bind 函數(shù)原型


std::bind 函數(shù)適配器 是 C++11 新引入的 函數(shù)適配器 , 可以 將 函數(shù) / 函數(shù)對(duì)象 / 函數(shù)指針 與 其參數(shù)綁定到一起 , 產(chǎn)生一個(gè)新的可調(diào)用函數(shù)對(duì)象 ;

std::bind 函數(shù)適配器 比 std::bind1st 和 std::bind2nd 函數(shù)適配器更加靈活 ,

  • std::bind1st 函數(shù)適配器 只能綁定 函數(shù)對(duì)象 第一個(gè)函數(shù)參數(shù) ;
  • std::bind2nd 函數(shù)適配器 只能綁定 函數(shù)對(duì)象 第二個(gè)函數(shù)參數(shù) ;
  • std::bind 函數(shù)適配器 不僅能綁定 第一第二個(gè)函數(shù)參數(shù) , 還能綁定第三個(gè)第四個(gè)直至第 N 個(gè)函數(shù)參數(shù) , 沒有任何位置限制 ;

std::bind 函數(shù)原型如下 :

template< class Fn, class... Args >  
/*unspecified*/ bind( Fn&& fn, Args&&... args );
  • 參數(shù)解析 :

    • Fn&& fn 參數(shù) : fn 是一個(gè)可調(diào)用對(duì)象 , 可以是 函數(shù) / 函數(shù)指針 / 成員函數(shù) / 成員函數(shù)指針 / 函數(shù)對(duì)象 / 謂詞 等可調(diào)用對(duì)象 ;
    • Args&&… args 參數(shù) : 這是一個(gè)可變的參數(shù) , 參數(shù)可以是值 , 引用 或者 占位符 ;
  • 返回值解析 : 返回的是一個(gè)未指定的類型 , 這個(gè)類型是一個(gè)函數(shù)對(duì)象 , 可以像普通函數(shù)那樣被調(diào)用 ; 當(dāng)返回的函數(shù)對(duì)象被調(diào)用時(shí) , 它會(huì)用提供的參數(shù)和 std::bind 中的占位符來調(diào)用 fn ;


占位符 是 std::placeholders::_1 , std::placeholders::_2 等值 ;

如果 參數(shù)中是 std::placeholders::_1 占位符 , 表示 第一個(gè) 參數(shù) , 不進(jìn)行修改 , 仍然保持其默認(rèn)值 ; std::placeholders::_2 占位符 , 表示 第二個(gè) 參數(shù) , 不進(jìn)行修改 , 仍然保持其默認(rèn)值 ;


2、代碼示例 - std::bind 函數(shù)


代碼示例 :

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

int main() {

	// 創(chuàng)建一個(gè) set 集合容器
	vector<int> myVector;

	// 向容器中插入元素
	myVector.push_back(9);
	myVector.push_back(5);
	myVector.push_back(2);
	myVector.push_back(7);
	myVector.push_back(2);

	// 向 foreach 循環(huán)中傳入 Lambda 表達(dá)式
	for_each(myVector.begin(), myVector.end(), [](int a) {
		std::cout << a << " ";
		});
	cout << endl;

	// 計(jì)算 vector 容器中 , 值為 2 的個(gè)數(shù)
	int equal_num = 2;
	int count = count_if(myVector.begin(), myVector.end(), bind(equal_to<int>(), placeholders::_1, equal_num));
	cout << "值為 2 的元素個(gè)數(shù) : " << count << endl;

	
	// 控制臺(tái)暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");
	return 0;
};

執(zhí)行結(jié)果 :

9 5 2 7 2
值為 2 的元素個(gè)數(shù) : 2
Press any key to continue . . .

【C++】STL 算法 ⑩ ( 函數(shù)適配器 | 函數(shù)適配器概念 | 函數(shù)適配器分類 | 函數(shù)適配器輔助函數(shù) | std::bind2nd 函數(shù)原型及示例 | std::bind 函數(shù)原型及示例 ),C++,c++,算法,開發(fā)語言,STL,函數(shù)適配器,函數(shù)適配器輔助函數(shù),函數(shù)適配器分類文章來源地址http://www.zghlxwxcb.cn/news/detail-786211.html

到了這里,關(guān)于【C++】STL 算法 ⑩ ( 函數(shù)適配器 | 函數(shù)適配器概念 | 函數(shù)適配器分類 | 函數(shù)適配器輔助函數(shù) | std::bind2nd 函數(shù)原型及示例 | std::bind 函數(shù)原型及示例 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++ [STL容器適配器]

    C++ [STL容器適配器]

    本文已收錄至《C++語言》專欄! 作者:ARMCSKGT 前面我們介紹了適配器模式中的反向迭代器,反向迭代器通過容器所支持的正向迭代器適配為具有反向迭代功能的迭代器,本節(jié)我們介紹STL中另一種適配器: 容器適配器 ! 前面我們提到過STL適配器模式,關(guān)于適配器的解釋: S

    2024年02月11日
    瀏覽(25)
  • C++ STL學(xué)習(xí)之【容器適配器】

    C++ STL學(xué)習(xí)之【容器適配器】

    ?個(gè)人主頁: 北 海 ??所屬專欄: C++修行之路 ??每篇一句: 圖片來源 A year from now you may wish you had started today. 明年今日,你會(huì)希望此時(shí)此刻的自己已經(jīng)開始行動(dòng)了。 適配器(配接器)是 STL 中的六大組件之一,扮演著軸承、轉(zhuǎn)換器的角色,使得 STL 中組件的使用更為靈活,

    2023年04月22日
    瀏覽(20)
  • 【C++】STL之容器適配器——使用deque適配stack和queue

    【C++】STL之容器適配器——使用deque適配stack和queue

    個(gè)人主頁:??在肯德基吃麻辣燙 分享一句喜歡的話:熱烈的火焰,冰封在最沉默的火山深處。 本文章主要介紹容器適配器的功能,以及一個(gè)適配的場(chǎng)景。 容器適配器,按字面意思理解的話,就是用來對(duì)一個(gè)容器進(jìn)行匹配的。在C++STL中,容器有:vector,list,deque,map,set等。

    2024年02月16日
    瀏覽(25)
  • STL:雙端隊(duì)列&容器適配器&仿函數(shù)&優(yōu)先級(jí)隊(duì)列

    STL:雙端隊(duì)列&容器適配器&仿函數(shù)&優(yōu)先級(jí)隊(duì)列

    雙端隊(duì)列可以在頭部和尾部進(jìn)行插入刪除操作 與vector相比,頭插效率高,不需要搬移元素 與list相比,空間利用率高 deque邏輯上空間是連續(xù)的,物理上并不是,是由一段段小空間拼接而成的 雙端隊(duì)列的迭代器比較復(fù)雜 cur:指向空間中被遍歷的那個(gè)元素 first:指向空間開始

    2024年02月16日
    瀏覽(26)
  • STL容器適配器 -- stack和queue(使用+實(shí)現(xiàn))(C++)

    STL容器適配器 -- stack和queue(使用+實(shí)現(xiàn))(C++)

    棧和隊(duì)列數(shù)據(jù)結(jié)構(gòu)+畫圖分析如果對(duì)棧和隊(duì)列的結(jié)構(gòu)不了解的,可以先看該鏈接的內(nèi)容 使用stack時(shí)需要頭文件 #includestack stack是一種容器適配器,用于具有 后進(jìn)先出 (LIFO)的環(huán)境中。只能從容器的一端(棧頂),執(zhí)行刪除、插入和提取操作。 stack是作為容器適配器實(shí)現(xiàn)的,容器

    2024年02月14日
    瀏覽(30)
  • 【C++】STL——反向迭代器的模擬實(shí)現(xiàn):迭代器適配器

    【C++】STL——反向迭代器的模擬實(shí)現(xiàn):迭代器適配器

    反向迭代器的使用相信大家都已經(jīng)比較熟悉了,那我們這篇文章具體講什么呢? ??,這篇文章我們重點(diǎn)來講一下 反向迭代器的模擬實(shí)現(xiàn) 。 那為什么我們之前不和正向迭代器放在一塊講呢?為什么要等到我們講完了容器適配器再來講反向迭代器的模擬實(shí)現(xiàn)呢? 那這個(gè)問題我

    2024年02月08日
    瀏覽(21)
  • 【C++】STL之適配器---用deque實(shí)現(xiàn)棧和隊(duì)列

    【C++】STL之適配器---用deque實(shí)現(xiàn)棧和隊(duì)列

    目錄 前言 一、deque ?1、deque 的原理介紹 ?2、deque 的底層結(jié)構(gòu) ?3、deque 的迭代器 ?4、deque 的優(yōu)缺點(diǎn) ? 4.1、優(yōu)點(diǎn) ? 4.2、缺點(diǎn) 二、stack 的介紹和使用 ?1、stack 的介紹 ?2、stack 的使用 ?3、stack 的模擬實(shí)現(xiàn) 三、queue 的介紹和使用 ?1、queue 的介紹? ?2、queue 的使用 ?3、queue 的模

    2024年02月07日
    瀏覽(23)
  • 【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL)

    【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL)

    文章綁定了VS平臺(tái)下std::stack和std::queue的源碼,大家可以下載了解一下?? 前面我們講了C語言的基礎(chǔ)知識(shí),也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的命名空間的一些知識(shí)點(diǎn)以及關(guān)于C++的缺省參數(shù)、函數(shù)重載,引用 和 內(nèi)聯(lián)函數(shù)也認(rèn)識(shí)了什么是類和對(duì)象以及怎么去new一個(gè) ‘對(duì)象

    2024年02月12日
    瀏覽(28)
  • C++、STL標(biāo)準(zhǔn)模板庫和泛型編程 ——適配器、補(bǔ)充(侯捷)

    C++、STL標(biāo)準(zhǔn)模板庫和泛型編程 ——適配器、補(bǔ)充(侯捷)

    侯捷 C++八部曲筆記匯總 - - - 持續(xù)更新 ! ! ! 一、C++ 面向?qū)ο蟾呒?jí)開發(fā) 1、C++面向?qū)ο蟾呒?jí)編程(上) 2、C++面向?qū)ο蟾呒?jí)編程(下) 二、STL 標(biāo)準(zhǔn)庫和泛型編程 1、分配器、序列式容器 2、關(guān)聯(lián)式容器 3、迭代器、 算法、仿函數(shù) 4、適配器、補(bǔ)充 三、C++ 設(shè)計(jì)模式 四、C++ 新標(biāo)準(zhǔn) 五、

    2023年04月27日
    瀏覽(27)
  • 【C++】STL反向迭代器模擬實(shí)現(xiàn),迭代器適配器,迭代器類型簡單介紹

    【C++】STL反向迭代器模擬實(shí)現(xiàn),迭代器適配器,迭代器類型簡單介紹

    本篇主要講反向迭代器的模擬實(shí)現(xiàn)。 能夠加深各位對(duì)泛型的理解。 前面我那篇string介紹里面已經(jīng)提到過反向迭代器是啥了,如果點(diǎn)進(jìn)來的同學(xué)還不知道,可以看看:[string介紹](https://blog.csdn.net/m0_62782700/article/details/130796914? spm=1001.2014.3001.5501) 迭代器,可以在不暴露底層實(shí)現(xiàn)細(xì)

    2024年02月16日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包