Vector的仿函数用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vector的仿函数用法相关的知识,希望对你有一定的参考价值。

一,概述        

仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。   有些功能的的代码,会在不同的成员函数中用到,想复用这些代码。

                            1)公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变量,再说为了复用这么一片代码,就要单立出一个函数,也不是很好维护。

                            2)仿函数,写一个简单类,除了那些维护一个类的成员函数外,就只是实现一个operator(),在类实例化时,就将要用的,非参数的元素传入类中

 

http://blog.csdn.net/tianshuai1111/article/details/7687983

仿函数find_if的用法:

http://www.cnblogs.com/motadou/archive/2009/02/01/1561549.html

http://blog.csdn.net/hj490134273/article/details/6051080

http://www.cnblogs.com/motadou/archive/2009/02/01/1561549.html

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct 
{
	int age;
	int studentid;
}student;
/**************vector仿函数*******************/
class vector_finder
{
public:
	vector_finder(const int &a,const int &b):m_v_a(a),m_v_b(b){}
	bool operator()(vector<student>::value_type & value)
	{
		return ((value.age ==m_v_a)&&(value.studentid==m_v_b));
	}
private:
	int m_v_a;
	int m_v_b;
};
int main()
{
	vector<student> vec;
	student stu;
	stu.age=10;
	stu.studentid=0;
	vec.push_back(stu);
	stu.age=11;
	stu.studentid=1;
	vec.push_back(stu);
	stu.age=12;
	stu.studentid=2;
	vec.push_back(stu);
	
	vector<student>::iterator it=find_if(vec.begin(),vec.end(),vector_finder(12,2));
	if(vec.end()==it)
	{
		printf("mu you zhaodao \\r\\n");
	}
	else
	{
		printf("位置 age[%d]stuid[%d]\\r\\n",it->age,it->studentid);
	}
	

	return 0;
}

 

以上是关于Vector的仿函数用法的主要内容,如果未能解决你的问题,请参考以下文章

vector中sort用法到自定义比较函数comp

从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

为啥我不能将带有互斥锁的仿函数传递给线程?

STL常用容器:vector容器用法总结

实现一个可以存储其函数参数的仿函数模板

为啥 C++11 不能将不可复制的仿函数移动到 std::function?