Advertisement
RobertDeMilo

RB1.7 Разница между шаблоном и классом

Apr 15th, 2024
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. // Пару итераторов представляем в виде шаблонного класса
  7. template<typename Iterator>
  8. struct IteratorRange
  9. {
  10.     Iterator first, last;
  11.  
  12.     Iterator begin() const
  13.     {
  14.         return first;
  15.     }
  16.     Iterator end() const
  17.     {
  18.         return last;
  19.     }
  20. };
  21.  
  22. template<typename T>
  23. IteratorRange<typename vector<T>::iterator> Head(vector<T>& v, size_t top)
  24. {
  25.     // min берем для того случая когда хотим 3 элемента, а векторе их всего 2
  26.     return { v.begin(), next(v.begin(), min(top,v.size())) };
  27. }
  28. // IteratorRange это не тип, это шаблон типа
  29. // чтобы из шаблона создать конкретный тип его нужно инстанцировать
  30. // IteratorRange<T> r - конкретный тип
  31.  
  32. template <typename T>
  33. size_t RangeSize(IteratorRange<T> r)
  34. {
  35.     return r.end() - r.begin();
  36. }
  37.  
  38. int main()
  39. {
  40.     vector<int> v = { 1,2,3,4,5 };
  41.  
  42.     for (int& x : Head(v, 3))
  43.     {
  44.         ++x;
  45.     }
  46.  
  47.     for (int x : v)
  48.     {
  49.         cout << x << ' ';
  50.     }
  51.  
  52.     //vector<double> d;
  53.  
  54.     cout << endl;
  55.     cout << RangeSize(Head(v, 3));
  56.  
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement