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;
}
时间: 2024-10-07 06:14:09

Vector的仿函数用法的相关文章

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

sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<algorithm>//貌似可以不用,但最好加上. using namespace std

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

从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法 sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<alg

由jtable浅谈vector&lt;vector&lt;Object&gt;&gt;的用法(转自a718515028的专栏)

以前只用过vector<Object>  ,但是在做从数据库导出数据放到jtable中时,发现还有个vector<vector<Object>>的用法. 先说jtable和DefaultTableModel jtable本身是可以显示一张列表,但是不能按钮监听的增加正行数据. jtable中没有addRow(Object[] rowData) 或者addRow(Vector rowData) ,方法. 但是jtable中有一个构造方法,JTable(TableModel

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

转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<

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

sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<algorithm>//貌似可以不用,但最好加上. using namespace std

vector库的用法

C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头文件:#include <vector>.vector 是一个类模板.不是一种数据类型,vector<int>是一种数据类型.Vector的存储空间是连续的,list不是连续存储的. 一. 定义和初始化vector< typeName > v1;       //默认v1为

ArrayList、LinkedList、 Vector、Map 用法比较

ArrayList和Vector是采用数组方式存储数据,此数组元素总数大于实际存储的数据个数以便增加和插入元素,二者都允许直接序号索引元素,但是插入数据要移动数组元素等内存操作,所以它们索引数据快.插入数据慢. ArrayList数组存储方式: [java] view plaincopyprint? private transient Object[] elementData; public ArrayList(int initialCapacity) { super(); if (initia

java.util.vector中的vector的详细用法

ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用.包括Vector的创建.向Vector中添加元素.从Vector中删除元素. * 统计Vector中元素的个数和遍历Vector中的元素. */ public class VectorDemo{ public static void main(String[] args){ //Vector的创建 //使用Vector

vector容器经常用法

容器简单介绍 定义及初始化 末尾插入元素 遍历 size 函数是能够动态添加的 通过下标操作添加改变vector内容不是安全的操作 仅能对已存在元素进行下标操作不存在会crash 将元素一个容器复制给另外一个容器类型必须匹配容器类型和元素类型必须同样 迭代器简单介绍 定义 begin和end操作 迭代器的自增和解引用操作 迭代器的算术操作 const_iterator 仅仅读 高级使用方法 容器元素类型必须满足例如以下两个约束 顺序容器的操作 加入元素的操作 避免存储end操作返回的迭代器 关系