从billionaires中找到中国38~45岁 的亿万富翁!
billion.bin是struct billion的2进制存储,billion的定义为:
struct billion {
int no;
char name[20];
char account[6];
int age;
char company[20];
char country[20];
};
要求内容:
1、读取2进制文件billion.bin,形成一个vector的容器内容。
2、使用for_each遍历vector容器内所有元素,调用find_billion(“China”, 38, 45),打印出满足要求的所有富翁。
3、上述find_billion是一个函数对象。
注:
eof()函数可以帮助我们用来判断文件是否为空
push_back放到每个vector容器后
foreach的用法:
其中比较麻烦的是关于foreach的函数调用
当不传参数是,可直接写个函数对vector内容进行访问
但是当需要传参数时,则需要定义struct或者类,通过构造函数进行传参,再通过重载运算符()的功能
#include<bits/stdc++.h>
using namespace std;
struct billion {
int no;
char name[20];
char account[6];
int age;
char company[20];
char country[20];
};
struct Play
{
const char* str;
int b,e;
Play(const char* s,int bb,int ee):str(s),b(bb),e(ee) {}
void operator () (billion i)
{
if(string(i.country)==string(str)&&b<i.age&&i.age<e)
cout<<i.no<<" "<<i.name<<" "<<i.account<<" "<<i.age<<" "<<i.company<<" "<<i.country<<endl;
}
};
int main()
{
ifstream in;
in.open("billion.bin",ios::binary);
billion a;
vector<billion> bill;
int i=0;
while(!in.eof())
{
in.read((char*)&a,sizeof(billion));
bill.push_back(a);
}
for_each(bill.begin(),bill.end(),Play("China",38,45) );
in.close();
return 0;
}