004:函数对象的过滤器
描述
程序填空输出指定结果
#include <iostream>
#include <vector>
using namespace std;
struct A {
int v;
A() { }
A(int n):v(n) { };
bool operator<(const A & a) const {
return v < a.v;
}
};
// 在此处补充你的代码
template <class T>
void Print(T s,T e)
{
for(;s!=e; ++s)
cout << *s << ",";
cout << endl;
}
template <class T1, class T2,class T3>
T2 Filter( T1 s,T1 e, T2 s2, T3 op)
{
for(;s != e; ++s) {
if( op(*s)) {
* s2 = * s;
++s2;
}
}
return s2;
}
ostream & operator <<(ostream & o,A & a)
{
o << a.v;
return o;
}
vector<int> ia;
vector<A> aa;
int main()
{
int m,n;
while(cin >> m >> n) {
ia.clear();
aa.clear();
int k,tmp;
cin >> k;
for(int i = 0;i < k; ++i) {
cin >> tmp;
ia.push_back(tmp);
aa.push_back(tmp);
}
vector<int> ib(k);
vector<A> ab(k);
vector<int>::iterator p = Filter(ia.begin(),ia.end(),ib.begin(),FilterClass<int>(m,n));
Print(ib.begin(),p);
vector<A>::iterator pp = Filter(aa.begin(),aa.end(),ab.begin(),FilterClass<A>(m,n));
Print(ab.begin(),pp);
}
return 0;
}
输入
多组数据
每组数据两行
第一行是两个整数 m 和 n
第二行先是一个整数k ,然后后面跟着k个整数
输出
对每组数据,按原顺序输出第二行的后k个整数中,大于m且小于n的数
输出两遍
数据保证一定能找到符合要求的整数
样例输入
1 3
1 2
2 8
5 1 2 3 4 9
样例输出
2,
2,
3,4,
3,4,
通过main函数得到构造函数的形参
vector<int>::iterator p = Filter(ia.begin(),ia.end(),ib.begin(),FilterClass<int>(m,n));
则补充的构造函数应为m,n的类型;
且需要bool函数重构(),用于排序;
注意上面的A类型只重构的<,故下面的比大小只能用<;
// 在此处补充你的代码
template <class T0>
struct FilterClass{
T0 m;
T0 n;
FilterClass(int m_,int n_):m(m_),n(n_){} //构造函数
bool operator ()(T0 t){
if (t<n&&m<t) return true; //只重载了<,所以只能用<
else return false;
}
};
005:白给的list排序
描述
程序填空,产生指定输出
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
int main()
{
double a[] = {1.2,3.4,9.8,7.3,2.6};
list<double> lst(a,a+5);
lst.sort(
// 在此处补充你的代码
);
for(list<double>::iterator i = lst.begin(); i != lst.end(); ++i)
cout << * i << "," ;
return 0;
}
输入
无
输出
9.8,7.3,3.4,2.6,1.2,
熟悉以下 list 的sort用法
还有greater() :
// 在此处补充你的代码
greater<double>() //反排序
//