C++ 預定義函式物件以及函式介面卡(一)
阿新 • • 發佈:2019-01-31
#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; }