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

【C++】STL 算法 ? ( 函數(shù)適配器嵌套用法 | modulus 函數(shù)對象 - 取模運算 | std::count_if 函數(shù)原型 | std::not1 函數(shù)原型 )

這篇具有很好參考價值的文章主要介紹了【C++】STL 算法 ? ( 函數(shù)適配器嵌套用法 | modulus 函數(shù)對象 - 取模運算 | std::count_if 函數(shù)原型 | std::not1 函數(shù)原型 )。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。





一、函數(shù)適配器示例 - 函數(shù)適配器正常用法



1、modulus 函數(shù)對象 - 取模運算


<functional> 頭文件 中 , 預(yù)定義了 modulus 函數(shù)對象 , 這是一個 二元函數(shù)對象 , 在該函數(shù)對象類中 , 重寫了 函數(shù)調(diào)用操作符 函數(shù) operator() , 該 預(yù)定義函數(shù)對象 代碼如下 :

// STRUCT TEMPLATE modulus
template <class _Ty = void>
struct modulus {
    _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;
    }
};

該函數(shù)對象 定義了 模板參數(shù) template <class _Ty = void> , _Ty 泛型的默認(rèn)參數(shù)是 void , 即 如果 不指定 模板參數(shù) , _Ty 泛型就是 void 類型 , 一般情況下使用 int 類型 進(jìn)行取模運算 ;

在 modulus 函數(shù)對象 中 , 重載 函數(shù)調(diào)用操作符 函數(shù) 是最核心的函數(shù) , 在該函數(shù)中 , 將第一個參數(shù) const _Ty& _Left 與 第二個參數(shù) const _Ty& _Right 進(jìn)行取模運算 , 返回 模運算 的結(jié)果 ;


代碼示例 :

#include "iostream"
using namespace std;
#include "functional"

int main() {

	// 創(chuàng)建函數(shù)對象
	modulus<int> mod;

	// 調(diào)用函數(shù)對象
	int result = mod(5, 2);

	// 打印執(zhí)行結(jié)果
	cout << "result = " << result << endl;


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

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

【C++】STL 算法 ? ( 函數(shù)適配器嵌套用法 | modulus 函數(shù)對象 - 取模運算 | std::count_if 函數(shù)原型 | std::not1 函數(shù)原型 ),C++,c++,算法,開發(fā)語言,stl,函數(shù)適配器,函數(shù)適配器嵌套,modulus


2、std::count_if 函數(shù)原型


std::count_if 函數(shù) 是 C++ 標(biāo)準(zhǔn)庫算法 , 該 函數(shù) 的作用是 計算范圍內(nèi)滿足特定條件的元素的數(shù)量 , 該函數(shù) 接受 一個迭代器范圍 和 謂詞函數(shù) ;

注意 : 迭代器范圍 的 起始迭代器 ~ 終止迭代器 是一個 前閉后開區(qū)間


std::count_if 算法的 函數(shù)原型 如下 :

// FUNCTION TEMPLATE count_if
template <class _InIt, class _Pr>
_NODISCARD _Iter_diff_t<_InIt> count_if(_InIt _First, _InIt _Last, _Pr _Pred) { // count elements satisfying _Pred
    _Adl_verify_range(_First, _Last);
    auto _UFirst               = _Get_unwrapped(_First);
    const auto _ULast          = _Get_unwrapped(_Last);
    _Iter_diff_t<_InIt> _Count = 0;
    for (; _UFirst != _ULast; ++_UFirst) {
        if (_Pred(*_UFirst)) {
            ++_Count;
        }
    }

    return _Count;
}
  • _InIt _First 參數(shù) : 迭代器范圍的 起始迭代器 , 包括本迭代器指向的元素 ;
  • _InIt _Last 參數(shù) : 迭代器范圍的 終止迭代器 , 不包括本迭代器指向的元素 ;
  • _Pr _Pred 參數(shù) : 謂詞函數(shù) ;

3、代碼示例 - 使用 函數(shù)適配器 綁定函數(shù)對象參數(shù)


在下面的代碼中 , 將 myVector 單端數(shù)組 容器 中的元素 設(shè)置給 modulus 函數(shù)對象的 第一個參數(shù) , 將 equal_num 變量設(shè)置為 該 modulus 函數(shù)對象的 第二個參數(shù) , 然后依次遍歷 myVector 單端數(shù)組 容器 將每個元素 與 equal_num 進(jìn)行取模運算 ;

	// 計算 vector 容器中 , 值為 2 的個數(shù)
	int equal_num = 2;
	// 取模運算 , 模 2 返回值 1 就是奇數(shù) , 返回值 0 就是偶數(shù)
	int count = count_if(myVector.begin(), myVector.end(), bind2nd(modulus<int>(), 2));

代碼示例 :

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

int main() {

	// 創(chuàng)建一個 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;

	// 計算 vector 容器中 , 值為 2 的個數(shù)
	int equal_num = 2;
	// 取模運算 , 模 2 返回值 1 就是奇數(shù) , 返回值 0 就是偶數(shù)
	int count = count_if(myVector.begin(), myVector.end(), bind2nd(modulus<int>(), 2));
	cout << "值奇數(shù)元素個數(shù) : " << count << endl;


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




二、函數(shù)適配器示例 - 函數(shù)適配器嵌套用法



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


std::not1 是 預(yù)定義的 函數(shù)適配器 函數(shù) , 該 函數(shù) 接收一個 一員函數(shù)對象 , 返回新的 一元函數(shù)對象 , 返回的 一元函數(shù)對象 是對輸入的 一元函數(shù)對象 的 結(jié)果 進(jìn)行 邏輯非 運算 ;


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

template <class UnaryPredicate>  
unary_negate<UnaryPredicate> not1(UnaryPredicate pred);
  • UnaryPredicate pred 參數(shù) : 一元謂詞 , 也就是 接受單個參數(shù) 并返回布爾值的可調(diào)用對象 ;
  • unary_negate<UnaryPredicate> 類型返回值 : 返回值 是 封裝了 UnaryPredicate 并提供了一個 operator() 成員函數(shù)一元謂詞 , 該函數(shù)對 UnaryPredicate 的結(jié)果取反 ;

std::not1 可以 與 std::bind1st 或 std::bind2nd 嵌套使用 , 創(chuàng)建更復(fù)雜的謂詞 ;


2、代碼示例 - 函數(shù)適配器嵌套用法


核心代碼如下 :

	// 計算 vector 容器中 , 值為 2 的個數(shù)
	int equal_num = 2;
	// 取模運算 , 模 2 返回值 1 就是奇數(shù) , 返回值 0 就是偶數(shù)
	// not1 將其取反 也就是獲取的是 非奇數(shù) 個數(shù)
	int count = count_if(myVector.begin(), myVector.end(), not1(bind2nd(modulus<int>(), 2)));

下面的代碼中 , modulus 是一個二元函數(shù)對象 , 返回 0 或 1 可以當(dāng)做 二元謂詞 ;

bind2nd(modulus<int>(), 2) 將 二元謂詞 中的 第二個元素進(jìn)行了綁定 , 只需要接收一個參數(shù) , 變成了 一元謂詞 ;

not1(bind2nd(modulus<int>(), 2)) 將 上述 一元謂詞 取反 , 得到一個新的一元謂詞 ;


代碼示例 :

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

int main() {

	// 創(chuàng)建一個 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;

	// 計算 vector 容器中 , 值為 2 的個數(shù)
	int equal_num = 2;
	// 取模運算 , 模 2 返回值 1 就是奇數(shù) , 返回值 0 就是偶數(shù)
	// not1 將其取反 也就是獲取的是 非奇數(shù) 個數(shù)
	int count = count_if(myVector.begin(), myVector.end(), not1(bind2nd(modulus<int>(), 2)));
	cout << "偶數(shù)元素個數(shù) : " << count << endl;


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

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

9 5 2 7 2
偶數(shù)元素個數(shù) : 2
請按任意鍵繼續(xù). . .

【C++】STL 算法 ? ( 函數(shù)適配器嵌套用法 | modulus 函數(shù)對象 - 取模運算 | std::count_if 函數(shù)原型 | std::not1 函數(shù)原型 ),C++,c++,算法,開發(fā)語言,stl,函數(shù)適配器,函數(shù)適配器嵌套,modulus文章來源地址http://www.zghlxwxcb.cn/news/detail-796491.html

到了這里,關(guān)于【C++】STL 算法 ? ( 函數(shù)適配器嵌套用法 | modulus 函數(shù)對象 - 取模運算 | std::count_if 函數(shù)原型 | std::not1 函數(shù)原型 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【STL】容器適配器stack和queue常見用法及模擬實現(xiàn)

    【STL】容器適配器stack和queue常見用法及模擬實現(xiàn)

    1.stack介紹及使用 1.1 stack的介紹 stack文檔介紹 stack是一種容器適配器,專門用在具有后進(jìn)先出操作的上下文環(huán)境中,其刪除只能從容器的一端進(jìn)行元素的插入與提取操作。 stack是作為容器適配器被實現(xiàn)的,容器適配器是使用特定容器類的封裝對象作為其基礎(chǔ)容器的類,提供一

    2024年02月06日
    瀏覽(24)
  • C++ [STL容器適配器]

    C++ [STL容器適配器]

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月14日
    瀏覽(30)
  • 【C++】STL之適配器---用deque實現(xiàn)棧和隊列

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

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

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

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

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

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

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

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

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

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

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

    2023年04月27日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包