fork download
  1. #include <vector>
  2. #include <iostream>
  3. #include <utility>
  4.  
  5. template <class TIterator>
  6. struct Range
  7. {
  8. Range(const TIterator &begin, const TIterator &end)
  9. :_begin(begin), _end(end) {}
  10.  
  11. TIterator begin() { return _begin; }
  12. TIterator end() { return _end; }
  13.  
  14. private:
  15. TIterator _begin;
  16. TIterator _end;
  17. };
  18.  
  19. template <class TRange>
  20. auto make_range(TRange r) -> Range<decltype(std::begin(r))>
  21. {
  22. return { std::begin(r), std::end(r) };
  23. }
  24.  
  25. template <class TRange>
  26. auto make_range2(TRange &r) -> Range<decltype(std::begin(r))>
  27. {
  28. return { std::begin(r), std::end(r) };
  29. }
  30.  
  31.  
  32. int main()
  33. {
  34. std::vector<int> vec = {1,2,3,4,5};
  35. auto r = make_range(vec);
  36.  
  37. for (auto i : r)
  38. {
  39. std::cout << i << std::endl;
  40. }
  41.  
  42. std::vector<int> vec2 = {1,2,3,4,5};
  43. auto r2 = make_range2(vec2);
  44.  
  45. for (auto i : r2)
  46. {
  47. std::cout << i << std::endl;
  48. }
  49.  
  50. return 0;
  51. }
  52.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
0
2
3
4
5
1
2
3
4
5