STL學習之十三:預定義函式和函式介面卡
本文主要介紹預定義函式和函式介面卡。預定義好的函式物件,能實現不同型別的資料的運算, 實現了資料型別 和演算法的分離===》通過函式物件技術實現。下面是示例程式碼:
#include "iostream" using namespace std; #include "vector" #include "set" #include "queue" #include "list" #include "algorithm" #include "string" #include "functional" // plus<type> 預定義好的函式物件,能實現不同型別的資料的 運算 // 實現了資料型別 和演算法的分離===》通過函式物件技術實現的 void main21() { //template<class _Ty> //struct plus // : public binary_function<_Ty, _Ty, _Ty> //{ // functor for operator+ // _Ty operator()(const _Ty& _Left, const _Ty& _Right) const // { // apply operator+ to operands // return (_Left + _Right); // } //}; plus<int> intAdd; int x = 10; int y = 20; int z = intAdd(x,y);// x+y cout << "z:" << z << endl;//結果為 30 plus<string> stringAdd; string s1 = "aaa"; string s2 = "bbb"; string s3 = stringAdd(s1,s2); cout << "s3:" <<s3 << endl;// 結果為 aaabbb vector<string> v1; v1.push_back("bbb"); v1.push_back("aaa"); v1.push_back("ccc"); v1.push_back("zzz"); sort(v1.begin(),v1.end(),greater<string>());// 從大到小 for (vector<string>::iterator it=v1.begin();it!=v1.end();it++) { cout << *it << endl; } // 求 ccc 出現的個數 string sc = "ccc"; //equal_to<string>() 有兩個引數,來自容器,來自sc // bind2nd 函式介面卡,把預定義函式物件 和第二個引數進行繫結 int num = count_if(v1.begin(),v1.end(),bind2nd (equal_to<string>(),sc)); cout << "num:" << num << endl; } class IsGreat { public: IsGreat(int i) { m_num = i; } bool operator()(int &num) { if (num > m_num) { return true; } else { return false; } } protected: private: int m_num; }; void main22() { vector<int> v1; for (int i=0;i<10;i++) { v1.push_back(i+1); } for (vector<int>::iterator it = v1.begin();it!=v1.end();it++) { cout << *it << " "; } cout << endl; int num1 = count(v1.begin(),v1.end(),3); cout << "=3 的 num1:"<< num1 << endl; // 通過謂詞求>2的個數 int num2 = count_if(v1.begin(),v1.end(),IsGreat(2)); cout << ">2的num2:" << num2 << endl; // 通過預定義的函式物件求>2 的函式物件 // greater<int>()有兩個引數,左引數來自容器的元素,右引數來自固定比較數2 int num3 = count_if(v1.begin(),v1.end(),bind2nd(greater<int>(),2)); cout << ">2的num3:" << num3 << endl; // 求奇數的個數 int num4 = count_if(v1.begin(),v1.end(),bind2nd(modulus<int>(),2)); cout << "奇數的個數 num4:" << num4 << endl; // 求偶數的個數 int num5 = count_if(v1.begin(),v1.end(),not1(bind2nd(modulus<int>(),2)));// 對上面去反 cout << "偶數的個數num5:" << num5 << endl; } void main() { //main21(); main22();// 函式介面卡綜合性案例 cout << "hello..."<< endl; system("pause"); }
相關推薦
STL學習之十三:預定義函式和函式介面卡
本文主要介紹預定義函式和函式介面卡。預定義好的函式物件,能實現不同型別的資料的運算, 實現了資料型別 和演算法的分離===》通過函式物件技術實現。下面是示例程式碼: #include "iostream" using namespace std; #include "ve
c++學習之路:2.預設引數&函式過載&堆記憶體分配
預設引數 規則:程式從右向左延伸讀取 例子:如下sortarr函式,在創造函式的時候可以直接賦值,這樣執行的時候就執行預設值。 又如debug函式,不傳參就會列印------------------; 函式過載 理解:幾個同名函式,所設有的引數不一樣,就代表為不同函式。 所以傳參的時候
php學習之道:php中is_file和file_exist的差別,and推斷文件夾is_dir
文件 -m post 文件的 style 文件夾 原因 -a 文件名 在PHP中,is_file和file_isexist是有非常小差別的 1) is_file: $path ="/path/to/file/text.txt"; if(file_exis
WebRTC學習之九:攝像頭的捕捉和顯示
分享 註意 conn con wid pre rac art 升級版本 較新的WebRTC源代碼中已經沒有了與VoiceEngine結構相應的VidoeEngine了,取而代之的是MeidaEngine。MediaEngine包括了Medi
虛擬機器學習之二:垃圾收集器和記憶體分配策略
1.物件是否可回收 1.1引用計數演算法 引用計數演算法:給物件中新增一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時,計數器值就減1;任何時候計數器值為0的物件就是不可能再被使用的物件。 客觀來說,引用計數演算法的實現簡單,判定效率高,在大部分情況下都是
libevent學習之三:簡單的伺服器和客戶端
1.伺服器#include <stdio.h> #include <time.h> #include <event2/bufferevent.h> #include <event2/buffer.h> #include <
python學習之二:python資料結構和記憶體管理
python資料結構和記憶體管理思維導圖:對於資料結構的學習主要從這幾方面入手:初始化常用操作(增刪該查)常用內建函式,注意點有序序列主要分為字串,列表,和元組,一.有序序列定義:str1=‘python’//字串l1=['python','java','c',100] o
STL學習之十二:函式物件和謂詞
本文主要介紹函式物件和謂詞的示例程式碼。函式物件是屬於類物件,能突破函式的概念 ,用以保持條用狀態資訊。具體的使用資訊科參見程式碼中的註釋部分。 示例程式碼主要包含: 1 .函式物件的定義 函式物件和普通函式的區別; 2. 分清楚STL演算法返回的值時迭代器 還是 謂
c++學習之路:2.預設引數&函式過載&堆記憶體分配
預設引數 規則:程式從右向左延伸讀取 例子:如下sortarr函式,在創造函式的時候可以直接賦值,這樣執行的時候就執行預設值。 又如debug函式,不傳參就會列印------------------; 函式過載 理解:幾個同名函式,所設有的引數不一樣,就代表為
支援向量機學習之2:核函式
maxW(α)=∑i=1nαi−12∑i,j=1nyiyjαiαj<xi,xj> s.t.⎧⎩⎨⎪⎪⎪⎪∑i=1nαiyi=0αi≥0i=1...n 的求解需要計算<xi,xj>這個內積,而如果輸入樣本線性不可分的話,我們採取
簡單的程式詮釋C++ STL算法系列之十三:copy
前面十二個演算法所展現的都屬於非變易演算法(Non-mutating algorithms)系列,現在我們來看看變易演算法。所謂變易演算法(Mutating algorithms)就是一組能夠修改容器元素資料的模板函式,可進行序列資料的複製,變換等。
JavaScript學習筆記十三:高階函式-sort
排序演算法 排序的核心是比較兩個元素的大小,通常規定,對於兩個元素x和y,如果認為x < y,則返回-1,如果認為x == y,則返回0,如果認為x > y,則返回1。 Java
Tensorflow深度學習之五:啟用函式
啟用函式的作用 在神經網路中,啟用函式的作用是能夠給神經網路加入一些非線性因素,使得神經網路可以更好地解決較為複雜的問題。 我們嘗試引入非線性的因素,對樣本進行分類。 在神經網路中也類似,我們需要引入一些非線性的因素,來更好地解決複雜的問題。而啟用函式恰好
linux學習之二:日常的基礎命令收集
幫助文檔 gedit 查看 日期 取整 style 位置 某月 linux 1、 ls 2、pwd 顯示當前目錄所在位置 3、date 日期時間 4、cal 日歷 默認顯示當前該月 cal 2012 :查看2012年的日歷 cal 月 年 : 查看某年某月
Linux學習之三:文件夾系統的結構和相對(絕對)路徑
sharp 二進制 沒有 數據 csharp pan 用戶 ont 臨時 理解每個目錄的作用 bin 二進制文件 boot 系統的啟動文件、內核 dev 設備文件 etc 配置文件 home 用戶的家目錄 lib 鏈接庫文件 l
轉: 【Java並發編程】之十三:生產者—消費者模型(含代碼)
tool boolean 通知 阻塞 上一個 [] ble 否則 線程 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17249321 生產者消費者問題是線程模型中的經典問題:生產者和消費者在同一時間段
Java學習之路:不走彎路,就是捷徑
下載地址 下載 何事 系統 也有 包括 軟件公司 項目管理師 應用 1.如何學習程序設計? Java是一種平臺,也是一種程序設計語言,如何學好程序設計不僅僅適用於Java,對C++等其他程序設計語言也一樣管用。有編程高手認為,JAVA也好C也好沒什麽分別,拿來就用。為什麽他
SecureCRT學習之道:SecureCRT 經常使用技巧
left popu nal copy crt 通過 時間 ddl pop 快捷鍵: 1、 ctrl + a : 移動光標到行首 2、 ctrl + e :移動光標到行尾 3、 ctrl + d :刪除光標之後的一個字符 4、 ctrl + w : 刪除行首到
Halcon學習之二:攝像頭獲取圖像和相關參數
digg tail tours mage eight sta vision name pict 1、close_all_framegrabbers ( : : : ) 關閉所有圖像采集設備。 2、close_framegrabber ( : : AcqHand
Halcon學習之三:有關圖像通道的函數
spa com detail too pan targe 個數 word pop 黑白攝像機會返回每個像素所對應的能量采用結果,這些結果組成了一幅單通道灰度值圖像,而對於RGB彩色攝像機,它將返回每個像素所對應的三個采樣結果,也就是一幅三通道圖像。下面這些是與圖像通道有關的