1. 程式人生 > >STL學習之十三:預定義函式和函式介面卡

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_filefile_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彩色攝像機,它將返回每個像素所對應的三個采樣結果,也就是一幅三通道圖像。下面這些是與圖像通道有關的