findif的使用

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>

using namespace std;
//学生信息的类:包含姓名和成绩
class Student
{
public:
char* name;
int score;
Student(){};
Student(char* n,int s){name=n;score = s;}
~Student(){}
};
//按姓名查找时用到的functor函数对象,如果不明白函数对象是什么,你可以上网查,这是C++比较进阶的技术,这里可能讲不太清楚。这个类就是重载了括号()运算符,所以可以用来当做一个函数来使用。
class StudentAdapter:public unary_function<Student,bool>
{
public:
char* name;
explicit StudentAdapter(char* argName){name=argName;}
bool operator ()(const Student& student){return !strcmp(name,student.name);}
};

int main(){
char name[30];
//构造一些学生信息
Student a("Jack",88);
Student b("Mike",95);
Student c("Mary",100);
Student d("David",99);
Student e("Boxer",77);
//创建vector用来存储
vector<Student> v;
//创建迭代器用来查询
vector<Student>::iterator iter;
//把所有学生信息加入到vector里
v.push_back(a);
v.push_back(b);
v.push_back(c);
v.push_back(d);
v.push_back(e);
cout<<"Student List:"<<endl;
//打印出所有的学生信息
for(iter=v.begin();iter<v.end();iter++)
{
cout<<iter->name<<':'<<iter->score<<endl;
}
cout<<"Input the name of the student you want to query:"<<endl;
//输入你想要查看的学生姓名
cin>>name;
//这一句最重要,用来查询你输入的学生姓名相对应的成绩,find_if函数可以网上查看原型,前两个参数是迭代器起始位置和终止位置,第三个参数是一个用于比较的函数对象,就是比较所有学生中哪个学生的名字和你输入的名字一样
iter = find_if(v.begin(), v.end(), StudentAdapter(name));
if(iter != v.end())
cout<<iter->name<<':'<<iter->score<<endl;
else
cout<<"Can't find the student!"<<endl;
system("pause");
return 0;
}

转载于:https://www.cnblogs.com/aquar/archive/2009/08/12/3451535.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值