037:函式物件的過濾器

WarYan發表於2020-10-24

037:函式物件的過濾器

題面

描述

程式填空輸出指定結果

#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的數
輸出兩遍
資料保證一定能找到符合要求的整數

思路

FilterClass<int>(m,n)需要模板類的定義,然後作為函式引數傳遞,傳遞後在相應的函式中呼叫

需要注意的是結構體裡只過載<所以我們在bool operator 裡也能只能用<

template<class T>
class FilterClass {
public:
	T m, n;
	FilterClass(T _m, T _n) :m(_m), n(_n) {

	}
	bool operator()(T t) {
		if (t < n && m < t) return true;
		return false;
	}

};

相關文章