fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. template<typename TIterator, bool (*Predicate)(const TIterator &, const TIterator &)>
  5. TIterator findPosition(TIterator begin, TIterator end)
  6. {
  7. TIterator result(begin);
  8. for (TIterator it = begin + 1; it != end; ++it)
  9. {
  10. if (Predicate(it, result))
  11. result = it;
  12. }
  13. return result;
  14. }
  15.  
  16. typedef std::vector<int> vec;
  17.  
  18. bool lesser(const vec::iterator &a, const vec::iterator &b)
  19. {
  20. return (*a) < (*b);
  21. }
  22.  
  23. bool greater(const vec::iterator &a, const vec::iterator &b)
  24. {
  25. return (*a) > (*b);
  26. }
  27.  
  28. bool weird(const vec::iterator &a, const vec::iterator &b)
  29. {
  30. return ((*a) | (*b)) & 0x4;
  31. }
  32.  
  33. int main(int argc, char **argv)
  34. {
  35. vec v;
  36. v.push_back(10000);
  37. v.push_back(10);
  38. v.push_back(20);
  39. v.push_back(30);
  40. v.push_back(40);
  41. v.push_back(50);
  42. v.push_back(1);
  43.  
  44. vec::iterator min = findPosition<typename vec::iterator, lesser>(v.begin(), v.end());
  45. vec::iterator max = findPosition<typename vec::iterator, greater>(v.begin(), v.end());
  46. vec::iterator weird = findPosition<typename vec::iterator, greater>(v.begin(), v.end());
  47.  
  48. std::cout << "min: " << *min << "\tmax: " << *max << "\tweird: " << *weird << '\t';
  49.  
  50. return 0;
  51. }
Success #stdin #stdout 0s 3028KB
stdin
Standard input is empty
stdout
min: 1	max: 10000	weird: 10000