Advertisement
SomniP

Iterator

Dec 14th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <ctime>
  4. #include <algorithm>
  5. #include <string>
  6.  
  7. using namespace std;
  8. class Iterator;
  9. class Vector
  10. {
  11.     int *arr;
  12.     int size;
  13. public:
  14.     friend Iterator;
  15.     Iterator begin();
  16.     Iterator end();
  17.     Vector() { arr = NULL; size = 0; }
  18.     Vector(int s = 0)
  19.     {
  20.         if (s > 0)
  21.         {
  22.             size = s;
  23.             arr = new int[s];
  24.             for (int i = 0; i < s; i++)
  25.                 arr[i] = 0;
  26.         }
  27.     }
  28.     ~Vector()
  29.     {
  30.         if (arr)
  31.             delete[]arr;
  32.     }
  33.     Vector(const Vector & B)
  34.     {
  35.         if (B.size > 0)
  36.         {
  37.             size = B.size;
  38.             arr = new int[size];
  39.             for (int i = 0; i < size; i++)
  40.                 arr[i] = B.arr[i];
  41.         }
  42.         else
  43.         {
  44.             size = 0;
  45.             arr = 0;
  46.         }
  47.     }
  48.     void PrintV() { for (int i = 0; i < size; i++)printf_s("%d ", arr[i]); printf_s("\n"); }
  49.     void ScanV()
  50.     {
  51.         for (int i = 0; i < size; i++)
  52.             cin >> arr[i];
  53.     }
  54.     int Get_size()
  55.     {
  56.         return size;
  57.     }
  58.     int Get_el(int i)
  59.     {
  60.         return arr[i];
  61.     }
  62.     Vector operator *(const Vector &B)
  63.     {
  64.         Vector C(size);
  65.         if (size == B.size)
  66.         {
  67.             for (int i = 0; i < size; i++)
  68.                 C.arr[i] = arr[i] * B.arr[i];
  69.             return C;
  70.         }
  71.         else
  72.             printf_s("\nРазмерности векторов не совпадают\n");
  73.         return *this;
  74.  
  75.     }
  76.     Vector operator *(int d)
  77.     {
  78.         for (int i = 0; i < size; i++)
  79.             arr[i] = arr[i] * d;
  80.         return *this;
  81.     }
  82.     Vector operator +(const Vector&B)
  83.     {
  84.         Vector C(size);
  85.         if (size == B.size)
  86.         {
  87.             for (int i = 0; i < size; i++)
  88.                 C.arr[i] = arr[i] + B.arr[i];
  89.             return C;
  90.         }
  91.         else
  92.             printf_s("\nРазмерности векторов не совпадают\n");
  93.         return *this;
  94.     }
  95.     Vector operator +(int d)
  96.     {
  97.         for (int i = 0; i < size; i++)
  98.             arr[i] = arr[i] + d;
  99.         return *this;
  100.     }
  101.     Vector operator -(const Vector&B)
  102.     {
  103.         Vector C(size);
  104.         if (size == B.size)
  105.         {
  106.             for (int i = 0; i < size; i++)
  107.                 C.arr[i] = arr[i] - B.arr[i];
  108.             return C;
  109.         }
  110.         else
  111.             printf_s("\nРазмерности векторов не совпадают\n");
  112.         return *this;
  113.     }
  114.     Vector operator -(int d)
  115.     {
  116.         for (int i = 0; i < size; i++)
  117.             arr[i] = arr[i] - d;
  118.         return *this;
  119.     }
  120.     bool operator >(const Vector &B)
  121.     {
  122.         int s1 = 0, s2 = 0;
  123.         for (int i = 0; i < size; i++)
  124.         {
  125.             s1 = s1 + arr[i] * arr[i];
  126.             s2 = s2 + B.arr[i] * B.arr[i];
  127.         }
  128.         if (s1 > s2)
  129.             return true;
  130.         return false;
  131.  
  132.     }
  133.     bool operator <(const Vector &B)
  134.     {
  135.         int s1 = 0, s2 = 0;
  136.         for (int i = 0; i < size; i++)
  137.         {
  138.             s1 = s1 + arr[i] * arr[i];
  139.             s2 = s2 + B.arr[i] * B.arr[i];
  140.         }
  141.         if (s1 <s2)
  142.             return true;
  143.         return false;
  144.     }
  145.  
  146.     Vector operator =(const Vector &B)
  147.     {
  148.         if (arr)
  149.             delete[] arr;
  150.         size = B.size;
  151.         arr = new int[size];
  152.         for (int i = 0; i < size; i++)
  153.             arr[i] = B.arr[i];
  154.         return *this;
  155.     }
  156.     bool operator ==(const Vector &B)
  157.     {
  158.         for (int i = 0; i < size; i++)
  159.             if (arr[i] != B.arr[i])
  160.                 return false;
  161.         return true;
  162.     }
  163.     bool operator !=(const Vector &B)
  164.     {
  165.         for (int i = 0; i < size; i++)
  166.             if (arr[i] != B.arr[i])
  167.                 return true;
  168.         return false;
  169.     }
  170.  
  171. };
  172.  
  173. class Iterator
  174. {
  175. public:
  176.     int *m;
  177. public:
  178.     friend Vector;
  179.     Iterator(int *a = 0) :m(a) {}
  180.     bool operator ==(const Iterator & it)
  181.     {
  182.         return (m == it.m);
  183.     }
  184.     bool operator !=(const Iterator & it)
  185.     {
  186.         return (m != it.m);
  187.     }
  188.  
  189.     Iterator operator ++();
  190.     Iterator operator --();
  191. };
  192.  
  193. Iterator Vector::begin()
  194. {
  195.     Iterator it(arr);
  196.     return it;
  197. }
  198. Iterator Vector::end()
  199. {
  200.     Iterator it(arr);
  201.     for (size_t u = 0u; u < size; ++u)
  202.     {
  203.         ++it;
  204.     }
  205.     return it;
  206. }
  207. Iterator Iterator::operator ++()
  208. {
  209.     return ++m;
  210. }
  211.  
  212. Iterator Iterator::operator --()
  213. {
  214.     return --m;
  215. }
  216. int main()
  217. {
  218.     setlocale(LC_ALL, "Rus");
  219.     Vector A(4);
  220.     A.ScanV();
  221.     Vector B(A);
  222.     A.PrintV();
  223.     Iterator it(A.begin());
  224.     //Iterator iter = A.begin();
  225.     cout << A.begin().m << " " << A.end().m << endl;
  226.     for(Iterator iter = A.begin(); iter != A.end(); ++iter)
  227.     {
  228.         cout << *iter.m << endl;
  229.     }
  230.     system("pause");
  231.  
  232.     return 0;
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement