自己實作系結器,代碼如下
#include <iostream>
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
#include <ctime>
using namespace std;
template<typename Container>
void printerContainer(Container & _container) {
typename Container::iterator it_begin = _container.begin();
typename Container::iterator it_end = _container.end();
while (it_begin != it_end) {
cout << *it_begin << " ";
++it_begin;
}
}
//compare是 二元函式物件, T 作為 myBind1st函式物件的屬性
template<typename compare, typename T>
class myBind1st {
public:
myBind1st<compare,T>(compare _comp, T _val) : comp(_comp), val(_val) {}
//外部呼叫的時候 傳入 T paremeter
bool operator()(T paremeter) {
//使用myBind1st函式物件的屬性,和外部傳入的引數 呼叫 二元函式物件
return comp(val, paremeter);
}
private:
compare comp;
T val;
};
//my_find_if 泛型演算法,實作查找功能,是一個函式模板, Iterator 迭代器,compare作為函式物件
template<typename Iterator,typename compare>
Iterator my_find_if(Iterator it_begin, Iterator it_end, compare comp) {
for (; it_begin != it_end; ++it_begin) {
if (comp(*it_begin)) {
return it_begin;
}
}
return it_end;
}//end my_find_if
int main() {
vector < int> vec;
srand(time(nullptr));
for (int i = 0; i < 20; i++) {
vec.push_back((rand() % 100 + 1));
}
printerContainer<vector < int>>(vec);
vector< int>::iterator it_begin = vec.begin();
vector< int>::iterator it_end = vec.end();
sort(it_begin, it_end);//默認小到大排序
cout << endl;
printerContainer<vector < int>>(vec);
cout << endl;
//greater二元函式物件
sort(it_begin, it_end, greater<int>());//大到小排序
printerContainer<vector < int>>(vec);
cout << endl;
vector<int>::iterator it_findValue = https://www.cnblogs.com/erichome/p/my_find_if(it_begin, it_end, myBind1st, int>(greater(), 70));
if (it_findValue != it_end) {
vec.insert(it_findValue, 70);
}
printerContainer>(vec);
cout << endl;
system("pause");
return 0;
}
上面代碼自己實作泛型演算法my_find_if,用于找到容器中指定的位置,插入元素
my_find_if 是一個函式模板,引數1,引數2是兩個迭代器指向起始和結束位置,在這兩個迭代器之間進行遍歷,
遍歷是否滿足的條件由第三個引數決定,第三個引數是一個一元函式物件,由于STL現成提供的greater,less都是
二元函式物件,所以我們自己需要實作一元函式物件,這個一元函式物件通過提供的二元函式物件和引數進行封裝,封裝后
就是myBind1st,myBind1st底層 operator()(parameter1) 中實際呼叫的函式二元函式物件的operator()( parameter1 ,parameter2)
vector<int>::iterator it_findValue = https://www.cnblogs.com/erichome/p/my_find_if(it_begin, it_end, myBind1st
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539282.html
標籤:C++
