Advertisement
Guest User

Untitled

a guest
May 26th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <iterator>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. template <typename T>
  8. class MyIterator;
  9.  
  10. template <typename T>
  11. class Sequence;
  12.  
  13.  
  14. template <typename T>
  15. class Drob {
  16. public:
  17.     T chisl;
  18.     T znam;
  19.     friend class MyIterator<T>;
  20.     friend class Sequence<T>;
  21.  
  22.     Drob(T chisl, T znam) : chisl(chisl), znam(znam) {}
  23.  
  24.     Drob<T> operator +(Drob<T> &obj) {
  25.         T a = this->chisl + obj.chisl;
  26.         T b = this->znam + obj.znam;
  27.         Drob<T> help (a,b);
  28.         return help;
  29.     }
  30.  
  31.     bool operator == (const Drob<T> &obj) {
  32.         return this->chisl == obj.chisl && this->znam == obj.znam;
  33.     }
  34.  
  35.     bool operator != (const Drob<T> &obj) {
  36.         return this->chisl != obj.chisl || this->znam != obj.znam;
  37.     }
  38.  
  39.     friend ostream& operator<< (ostream& os, Drob n) {
  40.         os << n.chisl << "/" << n.znam;
  41.         return os;
  42.     }
  43.  
  44. };
  45.  
  46. template <typename T>
  47. class Sequence {
  48. private:
  49.     vector<Drob<T>> seq;
  50. public:
  51.     Sequence(Drob<T> &a) {
  52.         seq.push_back(a);
  53.     }
  54.  
  55.     void addDrob(Drob<T> &a) {
  56.         seq.push_back(a);
  57.     }
  58.  
  59.     MyIterator<T> begin() {
  60.         return seq[0];
  61.     }
  62.  
  63.     MyIterator<T> end() {
  64.         return seq[seq.size() - 1];
  65.     }
  66.  
  67. };
  68.  
  69.  
  70. template <typename T>
  71. class MyIterator:
  72.         public iterator<
  73.                 forward_iterator_tag,
  74.                 int,
  75.                 ptrdiff_t,
  76.                 Drob<T>*,
  77.                 Drob<T>
  78.         >
  79. {
  80. private:
  81.     vector<Drob<T>> vec;
  82.     int count;
  83. public:
  84.     MyIterator<T> () {
  85.         auto vec = new vector<Drob<T>>;
  86.         count = 0;
  87.     }
  88.  
  89.     MyIterator<T> (Drob<T> &drob) {
  90.         vec.push_back(drob);
  91.         count = 0;
  92.     }
  93.  
  94.     bool operator == (const MyIterator<T> &obj) {
  95.         if (this->vec.size() != obj.vec.size()) return false;
  96.         for (int i = 0; i < this->vec.size(); i++) {
  97.             if (this->vec[i] != obj.vec[i]) return false;
  98.         }
  99.         return true;
  100.     }
  101.  
  102.     bool operator != (const MyIterator<T> &obj) {
  103.         return !(*this == obj);
  104.     }
  105.  
  106.     Drob<T> operator * () {
  107.         if (vec.size() == 0) {
  108.             Drob<T> nulld(0,1);
  109.             return nulld;
  110.         }
  111.         if (count != vec.size()) {
  112.             return vec[count]+vec[count+1];
  113.         }
  114.         return vec[count];
  115.     }
  116.  
  117.     Drob<T>& operator = (Drob<T> &f) {
  118.         if ((vec.size() <= 1) || (count == vec.size())) {
  119.             throw "Error";
  120.         }
  121.         if (count != vec.size()) {
  122.             vec[count].chisl = f.chisl*vec[count+1].znam - f.znam*vec[count+1].chisl;
  123.             vec[count].znam = f.znam * vec[count+1].znam;
  124.             return vec[count];
  125.         }
  126.     }
  127.  
  128.     MyIterator<T> operator ++() {
  129.         count++;
  130.         return *this;
  131.     }
  132.  
  133.     MyIterator<T> operator ++(int) {
  134.         count++;
  135.         return *this;
  136.     }
  137.  
  138.     Drob<T> operator [] (int a) {
  139.         return vec[a];
  140.     }
  141. };
  142.  
  143.  
  144. int main() {
  145.  
  146.     Drob<int> drob(1,2);
  147.     Drob<int> drob1(2,3);
  148.     Drob<int> drob2(4,6);
  149.     Drob<int> drob3(1,8);
  150.     Drob<int> drob4(1,1);
  151.  
  152.     cout << drob << endl;
  153.     cout << endl;
  154.  
  155.     Sequence<int> seq(drob);
  156.     seq.addDrob(drob1);seq.addDrob(drob2);seq.addDrob(drob3);seq.addDrob(drob4);
  157.  
  158.     for (auto it = seq.begin(); it != seq.end(); it++) {
  159.         cout << *it << endl;
  160.     }
  161.  
  162.     return 0;
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement