当前位置:   article > 正文

C++ 函数对象的过滤器练习_函数对象的过滤器 描述 程序填空输出指定结果 #include #includ

函数对象的过滤器 描述 程序填空输出指定结果 #include #include

描述

程序填空输出指定结果

#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,

 

如果将FilterClass<int>(m,n)当作一个函数会发现这个参数是不够的,所以FilterClass<int>(m,n)是一个对象,重载了op(*s) ()运算符。

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. struct A {
  5. int v;
  6. A() { }
  7. A(int n) :v(n) { };
  8. bool operator<(const A & a) const {
  9. return v < a.v;
  10. }
  11. };
  12. // 在此处补充你的代码
  13. template <class T>
  14. struct FilterClass {
  15. T m, n;
  16. FilterClass(T a, T b):m(a),n(b) {}
  17. bool operator()(T s) {
  18. return (m < s) && (s < n);
  19. }
  20. };
  21. template <class T>
  22. void Print(T s, T e)
  23. {
  24. for (; s != e; ++s)
  25. cout << *s << ",";
  26. cout << endl;
  27. }
  28. template <class T1, class T2, class T3>
  29. T2 Filter(T1 s, T1 e, T2 s2, T3 op)
  30. {
  31. for (; s != e; ++s) {
  32. if (op(*s)) {
  33. *s2 = *s;
  34. ++s2;
  35. }
  36. }
  37. return s2;
  38. }
  39. ostream & operator <<(ostream & o, A & a)
  40. {
  41. o << a.v;
  42. return o;
  43. }
  44. vector<int> ia;
  45. vector<A> aa;
  46. int main()
  47. {
  48. int m, n;
  49. while (cin >> m >> n) {
  50. ia.clear();
  51. aa.clear();
  52. int k, tmp;
  53. cin >> k;
  54. for (int i = 0; i < k; ++i) {
  55. cin >> tmp;
  56. ia.push_back(tmp);
  57. aa.push_back(tmp);
  58. }
  59. vector<int> ib(k);
  60. vector<A> ab(k);
  61. vector<int>::iterator p = Filter(ia.begin(), ia.end(), ib.begin(), FilterClass<int>(m, n));
  62. Print(ib.begin(), p);
  63. vector<A>::iterator pp = Filter(aa.begin(), aa.end(), ab.begin(), FilterClass<A>(m, n));
  64. Print(ab.begin(), pp);
  65. }
  66. return 0;
  67. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/208313
推荐阅读
相关标签