自己实现绑定器,代码如下
#include #include #include #include #include #include using namespace std;templatevoid 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函数对象的属性templateclass myBind1st {public:myBind1st(compare _comp, T _val) : comp(_comp), val(_val) {}//外部调用的时候 传入 T paremeterbool operator()(T paremeter) {//使用myBind1st函数对象的属性,和外部传入的参数 调用 二元函数对象return comp(val, paremeter);}private:compare comp;T val;};//my_find_if 泛型算法,实现查找功能,是一个函数模板, Iterator 迭代器,compare作为函数对象templateIterator 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_ifint main() {vector vec;srand(time(nullptr));for (int i = 0; i < 20; i++) {vec.push_back((rand() % 100 + 1));}printerContainer<vector >(vec);vector::iterator it_begin = vec.begin();vector::iterator it_end = vec.end();sort(it_begin, it_end);//默认小到大排序cout << endl;printerContainer<vector >(vec);cout << endl;//greater二元函数对象sort(it_begin, it_end, greater());//大到小排序printerContainer<vector >(vec);cout << endl;vector::iterator it_findValue = my_find_if(it_begin, it_end, myBind1st<greater, int>(greater(), 70));if (it_findValue != it_end) {vec.insert(it_findValue, 70);}printerContainer<vector >(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::iterator it_findValue = my_find_if(it_begin, it_end, myBind1st<greater, int>(greater(), 70));