1. 程式人生 > >C++ 預定義函式物件以及函式介面卡(一)

C++ 預定義函式物件以及函式介面卡(一)

#include<iostream>
using namespace std;

#include"functional"   //預定義函式物件的函式實現都寫在這個庫檔案當中
#include"string"
#include<vector>
#include<list>
#include<algorithm>
#include"set"


/*總結*/
//1----->預定義函式物件基本概念:標準模板庫STL提前定義了很多預定義函式物件,#include <functional> 必須包含。


//有關於plus<>預定義函式物件的正確使用  並且實現了演算法與資料型別的分離 ----> 通過函式物件實現
void main21()
{
	//關於引數個數,只需要追蹤原始碼即可
	plus<int> intAdd;
	int a = 10;
	int b = 21;
	int c = intAdd(a, b);
	cout << "C =" <<c<< endl;


	plus<string> stringAdd;
	string d = "hello";
	string e = "CJLU";
	string f = stringAdd(d, e);
	cout << "f =" << f<<endl;

}

//有關sort中greater的使用
void main22()
{
	vector<string> m_vec;

	m_vec.push_back("ghello");
	m_vec.push_back("dhello");
	m_vec.push_back("khello");
	m_vec.push_back("lhello");
	m_vec.push_back("lhello");
	m_vec.push_back("lhello");

	for (vector<string>::iterator it = m_vec.begin(); it != m_vec.end(); it++)
	{
		cout << *it << " ";
	}

	cout << endl;

	sort(m_vec.begin(), m_vec.end(), greater<string>());

	for (vector<string>::iterator it = m_vec.begin(); it != m_vec.end(); it++)
	{
		cout << *it << " ";
	}

	cout << endl;

	//equal_to<string>() 有兩個引數,左引數來自於容器 右引數來自於sc
	//函式介面卡:將預定義函式物件與第二個引數進行繫結  bind2nd
	string sc = "lhello";

	//count_if 用來遍歷容器並且返回某個元素出現的位置
	int num = count_if(m_vec.begin(), m_vec.end(), bind2nd(equal_to<string>(), sc));

	cout << "lhello 出現過" << num << "次";


}


int main()
{
	//main21();  //有關於plus<>預定義函式物件的正確使用
	main22();  //有關sort中greater的使用
	system("pause");
	return 0;
}