Advertisement
amsavchenko

Untitled

Sep 10th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.87 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. template <typename TElement>
  7. class Sequence {
  8. protected:
  9.     int length;
  10.     bool isEmpty;
  11. public:
  12.     Sequence();
  13.     ~Sequence();
  14.     virtual TElement Get (int index) = 0;
  15.     virtual TElement GetFirst() = 0;
  16.     virtual TElement GetLast () = 0;
  17.     // virtual Sequence<TElement> GetSubsequence (int startIndex, int endIndex) = 0;
  18.     virtual void Append (TElement item) = 0;
  19.     virtual void Prepend (TElement item) = 0;
  20.     virtual void InsertAt (int index, TElement item) = 0;
  21.     virtual void Remove (TElement item) = 0;
  22.    
  23. };
  24. template <typename TElement>
  25. Sequence<TElement>::Sequence() {
  26.     length = 0;
  27.     isEmpty = true;
  28. }
  29.  
  30. template <typename TElement>
  31. Sequence<TElement>::~Sequence() {
  32.    
  33. }
  34.  
  35.  
  36. template <typename TElement>
  37. class ArraySequence : public Sequence<TElement> {
  38. private:
  39.     TElement *Array;
  40. public:
  41.     ArraySequence();
  42.     ~ArraySequence();
  43.     TElement Get (int index);
  44.     TElement GetFirst();
  45.     TElement GetLast ();
  46.     ArraySequence<TElement> GetSubsequence (int startIndex, int endIndex);
  47.     void Append (TElement item);
  48.     void Prepend (TElement item);
  49.     void InsertAt (int index, TElement item);
  50.     void Remove (TElement item);
  51.    
  52.     //
  53.     void qwe(TElement *array);
  54.     void print_all ();
  55. };
  56.  
  57. template <typename TElement>
  58. ArraySequence<TElement>::ArraySequence() {
  59.     Array = new TElement;
  60. }
  61.  
  62. template <typename TElement>
  63. ArraySequence<TElement>::~ArraySequence() {
  64.     delete Array;
  65. }
  66.  
  67. template <typename TElement>
  68. TElement ArraySequence<TElement>:: Get (int index) {
  69.     try {
  70.         if (index < 0 || index >= this->length) {
  71.             throw 999;
  72.         }
  73.         return Array[index];
  74.     }
  75.     catch (int str) {
  76.         cout << str << endl;
  77.         exit(0);
  78.     }
  79.    
  80.     return Array[index];
  81. }
  82.  
  83. template <typename TElement>
  84. TElement ArraySequence<TElement>:: GetFirst () {
  85.     return Array[0];
  86. }
  87.  
  88. template <typename TElement>
  89. TElement ArraySequence<TElement>:: GetLast() {
  90.     return Array [this->length - 1];
  91. }
  92. template <typename TElement>    // удалить потом
  93. void ArraySequence<TElement>:: qwe(TElement *array) {
  94.     Array = array;
  95. }
  96.  
  97. template <typename TElement>
  98. void ArraySequence<TElement>:: Append(TElement item) {  // Append. вставить в конец
  99.     if (this->length == 0) {
  100.         this->length ++;
  101.         this->isEmpty = false;
  102.         Array [0] = item;
  103.     }
  104.     else {
  105.         this->length ++;
  106.         TElement *newArray = new TElement [this->length];
  107.         for (int i = 0; i < this->length - 1; i++) {
  108.             newArray[i] = Array [i];
  109.         }
  110.         newArray[this->length - 1] = item;
  111.         Array = newArray;
  112.     }
  113. }
  114.  
  115. template <typename TElement>
  116. void ArraySequence<TElement>:: Prepend(TElement item) {  // Prepend. вставить в начало
  117.     if (this->length == 0) {
  118.         this->length ++;
  119.         this->isEmpty = false;
  120.         Array [0] = item;
  121.     }
  122.     else {
  123.         this->length ++;
  124.         TElement *newArray = new TElement [this->length];
  125.         for (int i = 1; i < this->length; i++) {
  126.             newArray[i] = Array [i-1];
  127.         }
  128.         newArray[0] = item;
  129.         Array = newArray;
  130.     }
  131. }
  132.  
  133. template <typename TElement>
  134. void ArraySequence<TElement>:: InsertAt(int index, TElement item) {
  135.     if (index == 0) {
  136.         this->Prepend(item);
  137.     }
  138.     if (index == this->length) this->Append(item);  // или вообще запретить это?
  139.     else {
  140.         this->length ++;
  141.         TElement *newArray = new TElement [this->length];
  142.         for (int i = 0; i < index; i ++) {
  143.             newArray[i] = Array[i];
  144.         }
  145.         newArray[index] = item;
  146.         for (int i = index + 1; i < this->length; i++) {
  147.             newArray [i] = Array [i-1];
  148.         }
  149.         Array = newArray;
  150.     }
  151. }
  152.  
  153.  
  154. template <typename TElement>
  155. void ArraySequence<TElement>:: Remove(TElement item) {
  156.     for (int i = 0; i < this->length; i ++) {
  157.         //cout << Array[i] << " ";
  158.         if (Array[i] == item) {
  159.             this->length --;
  160.             TElement *newArray = new TElement [this->length];
  161.             for (int j = 0; j < i; j ++) {
  162.                 newArray[j] = Array [j];
  163.             }
  164.             for (int k = i; k < this->length; k ++) {
  165.                 newArray[k] = Array[k+1];
  166.             }
  167.             Array = newArray;
  168.             i --;
  169.         }
  170.     }
  171. }
  172.  
  173. template <typename TElement>
  174. ArraySequence<TElement> ArraySequence<TElement>:: GetSubsequence(int startIndex, int endIndex) {
  175.     ArraySequence<TElement> Subsequence;
  176.     for (int i = startIndex; i <= endIndex; i ++) {
  177.         Subsequence.Append(Array[i]);
  178.     }
  179.     return Subsequence;
  180. }
  181.  
  182.  
  183. template <typename TElement>
  184. void ArraySequence<TElement>:: print_all() {
  185.     for (int i = 0; i < this->length; i ++) {
  186.         cout << Array[i] << endl;
  187.     }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement