当前位置:   article > 正文

037:函数对象的过滤器

函数对象的过滤器

题目:

http://cxsjsxmooc.openjudge.cn/2021t3springall2/037/

分析:

这道题首先是判断要写什么。从以下代码段中可知

  1. vector<int>::iterator p = Filter(ia.begin(),ia.end(),ib.begin(),FilterClass<int>(m,n));
  2. T2 Filter( T1 s,T1 e, T2 s2, T3 op)
  3. if( op(*s))

 要写的是一个作用是接收一个类型变量*s并返回bool类型(其他也行,更准确来说是返回一个判断)的模版类FilterClass,且这个模版类有两个参数m和n。

判断完成后就是简单的操作了,注意有个小坑是,结构体A中只重构了"<"而没有重构“>”,故在FilterClass中作比较时只能用"<"。

 

参考代码:

  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. class FilterClass{
  15. private:
  16. T m;
  17. T n;
  18. public:
  19. FilterClass(T _m,T _n):m(_m),n(_n){}
  20. bool operator()(T a){
  21. if(m < a && a < n) return true;
  22. else return false;
  23. }
  24. };
  25. template <class T>
  26. void Print(T s,T e)
  27. {
  28. for(;s!=e; ++s)
  29. cout << *s << ",";
  30. cout << endl;
  31. }
  32. template <class T1, class T2,class T3>
  33. T2 Filter( T1 s,T1 e, T2 s2, T3 op)
  34. {
  35. for(;s != e; ++s) {
  36. if( op(*s)) {
  37. * s2 = * s;
  38. ++s2;
  39. }
  40. }
  41. return s2;
  42. }
  43. ostream & operator <<(ostream & o,A & a)
  44. {
  45. o << a.v;
  46. return o;
  47. }
  48. vector<int> ia;
  49. vector<A> aa;
  50. int main()
  51. {
  52. int m,n;
  53. while(cin >> m >> n) {
  54. ia.clear();
  55. aa.clear();
  56. int k,tmp;
  57. cin >> k;
  58. for(int i = 0;i < k; ++i) {
  59. cin >> tmp;
  60. ia.push_back(tmp);
  61. aa.push_back(tmp);
  62. }
  63. vector<int> ib(k);
  64. vector<A> ab(k);
  65. vector<int>::iterator p = Filter(ia.begin(),ia.end(),ib.begin(),FilterClass<int>(m,n));
  66. Print(ib.begin(),p);
  67. vector<A>::iterator pp = Filter(aa.begin(),aa.end(),ab.begin(),FilterClass<A>(m,n));
  68. Print(ab.begin(),pp);
  69. }
  70. return 0;
  71. }

注:以上代码虽然通过了OpenJudge的样例测试,但受限于本人水平,如有疏漏,恳请斧正。

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

闽ICP备14008679号