赞
踩
北大程序设计与算法(三)测验题汇总(2020春季)
程序填空输出指定结果
#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,
来源
Guo Wei
此处就是定义FilterClass<int>(m,n)
模板而已,没什么难度
template <class T>
class FilterClass{
private:
T m;
T n;
public:
FilterClass(T _m,T _n):m(_m),n(_n){ }
bool operator ()(T t){
if(t < n && m < t)
return true;
else
return false;
}
};
但是还是有一个小小注意点是,因为所给的函数只有<
的重载,那么我们也只能使用<
符号,但是由于前面的定义m,n
都是整型该怎么比较对象大于m
且小于n
呢,这里可别忘了可以创建临时对象啊,如
struct A {
int v;
A() { }
A(int n):v(n) { };
bool operator<(const A & a) const {
return v < a.v;
}
};
以上代码就为我们提供了临时对象的创建,所以不用担心<
的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。