C++自定义仿函数
.main代码
#include <iostream>
#include <list>
#include <algorithm>//导入算法包
using namespace std;
//自定义仿函数
class AA{
public:
void operator()(string conut){
cout << "我是仿函数" << " " << conut << endl;
}
};
int main() {
list<string> listVar;
listVar.insert(listVar.begin(), "1...");
listVar.insert(listVar.begin(), "2....");
listVar.insert(listVar.begin(), "3....");
listVar.insert(listVar.begin(), "4....");
listVar.insert(listVar.begin(), "5....");
listVar.insert(listVar.begin(), "6....");
listVar.insert(listVar.begin(), "7....");
listVar.insert(listVar.begin(), "8....");
for_each(listVar.begin(), listVar.end(), AA());
}
我们来看for_each的头文件代码
template<typename _InputIterator, typename _Function>
_Function
for_each(_InputIterator __first, _InputIterator __last, _Function __f)
{
// concept requirements
__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
__glibcxx_requires_valid_range(__first, __last);
for (; __first != __last; ++__first)
__f(*__first);
return _GLIBCXX_MOVE(__f);
}
第一行template 告诉我们for_each是一个模板函数
for_each的参数告诉我们开始两个参数需要两个迭代器,最后一个参数是仿函数;
那什么又是仿函数呢? 仿函数其实就是我们一起用过的符号重载
,只不过我们这个重载的是()
符号,这个符号调用起来有点像函数一样
仿函数例子
class Function{
public:
//仿函数
void operator()()
{
cout << "我是仿函数" << endl;
}
};
//普通函数
void fun2(){
cout << "我是普通函数" << endl;
}
int main() {
Function fun1;
//仿函数的调用
fun1();
//普通函数的调用
fun2();
}
有上述代码可知,我们的仿函数因为调用起来和普通的函数一样,所以叫做仿函数