Advertisement
scherbakovss

Template class array

Nov 15th, 2016
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1.  
  2. /*Задание:
  3. Описать шаблон класса для хранения данных (контейнер). Данные
  4. должны хранится, например, в виде массива. Шаблон должен
  5. включать в себя функции добавления данных, удаления
  6. данных, вывода данных на консоль ( info() ). Реализовать итератор для
  7. перебора данных контейнера так, чтобы он перебирал элементы
  8. в следующем порядке: сначала первый добавленный в массив элемент,
  9. затем последний, затем второй добавленный в массив элемент,
  10. затем предпоследний и т.д. При достижении последнего элемента
  11. итератор должен «переключаться» снова на первый элемент, то
  12. есть быть «кольцевым». Продемонстрировать работу шаблона на
  13. объектах как встроенного типа, так и собственного класса. Для
  14. этого создать собственный класс и перегрузить в нем нужные
  15. функции-операции.
  16. */
  17.  
  18. #include "stdafx.h"
  19.  
  20. #include<iostream>
  21. #include<time.h>
  22. using namespace std;
  23.  
  24. template <typename T>
  25. struct Elem
  26. {
  27. T *mass;
  28. int razmer;
  29. Elem * next, *prev;
  30. };
  31.  
  32. template <typename T>
  33. class Array
  34. {
  35. Elem<T> * Head, *Hvost;
  36. int Count;
  37. int size;
  38. public:
  39. Array();
  40. Array(int);
  41. Array(const Array&);
  42. ~Array();
  43. void Getsize();
  44. void SetSize(int size, int grow);
  45. void GetUpperBound();
  46. bool IsEmpty();
  47. void FreeExtra();
  48. void RemoveAll();
  49. void GetAt(int pos);
  50. void SetAt(int pos);
  51. Array &operator[](const Array&);
  52. Array& operator=(const Array&);
  53. void Add();
  54. void Append(const Array&);
  55. void GetData();
  56. void InsertAt(int pos);
  57. void RemoveAt(int pos);
  58. void Show(const Array&);
  59. };
  60. template <typename T>
  61. Array<T>::Array()
  62. {
  63. Count = 0;
  64. Head = Hvost = NULL;
  65. size = 0;
  66. }
  67. template <typename T>
  68. Array<T>::Array(int n)
  69. {
  70.  
  71. Elem *temp = new Elem();
  72. temp->mass = new int[n];
  73. temp->razmer = n;
  74. for (int i = 0; i<n; i++)
  75. temp->mass[i] = rand() % 20;
  76. Count = 0;
  77. Head = Hvost = NULL;
  78. size = 0;
  79. }
  80. template <typename T>
  81. Array<T>::Array(const Array &N)
  82. {
  83. Elem<T> *temp = N.Head;
  84. while (temp != 0){
  85. AddHvost(temp->mass);
  86. temp = temp->next;
  87.  
  88. }
  89. }
  90. template <typename T>
  91. void Array<T>::Show(const Array&N)
  92. {
  93.  
  94. Elem<T> *temp = N.Head;
  95. while (temp != 0){
  96. for (int i = 0; i<temp->razmer; i++)
  97. cout << temp->mass << " ";
  98. temp = temp->next;
  99.  
  100. }
  101. }
  102. int main()
  103. {
  104. setlocale(LC_ALL, "rus");
  105. int num; // размер массива
  106. cout << "Ведите количество элементов стека: " << endl;
  107. cin >> num; // получение от пользователя размера массива
  108.  
  109. Array <int> myArray(num);
  110. myArray.Add();
  111. myArray.Append(num);
  112. myArray.FreeExtra();
  113. myArray.GetAt(0);
  114. myArray.GetData();
  115. myArray.Getsize();
  116. myArray.GetUpperBound();
  117. myArray.InsertAt(2);
  118. myArray.IsEmpty();
  119. myArray.Show(num);
  120. system("pause");
  121. return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement