Advertisement
evcamels

course-19

Jan 19th, 2021
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. using namespace std;
  5. template <typename T> class vectorClass
  6. {
  7.  
  8. // целочисленный указатель
  9. // в котором хранится адрес нашего вектора
  10. T* arr;
  11.  
  12. // вместимость общая память
  13. // вместимость вектора
  14. int capacity;
  15.  
  16. // количество элементов присутствующих в векторе
  17. int current;
  18.  
  19. public:
  20. // конструктор по умолчанию для инициализации
  21. // начальная емкость 1 элемент и распределение
  22. // памяти с использованием динамического распределния
  23. vectorClass()
  24. {
  25. arr = new T[1];
  26. capacity = 1;
  27. current = 0;
  28. }
  29.  
  30. // функция добавления елемента в конец
  31. void push(T data)
  32. {
  33.  
  34. // если количество элементов равно вместимости то
  35. // это означает что нет места чтобы разместить большее
  36. // количество элементов поэтому нужно
  37. // удвоить емкость
  38. if (current == capacity) {
  39. T* temp = new T[2 * capacity];
  40.  
  41. // копирование старых эелементов массива в новый
  42. for (int i = 0; i < capacity; i++) {
  43. temp[i] = arr[i];
  44. }
  45.  
  46. // удаление предыдущего массива
  47. delete[] arr;
  48. capacity *= 2;
  49. arr = temp;
  50. }
  51.  
  52. arr[current] = data;
  53. current++;
  54. }
  55.  
  56. // функция для добавления эелемента по любому индексу
  57. void push(int data, int index)
  58. {
  59.  
  60. // если индекс равен вместимости
  61. if (index == capacity)
  62. push(data);
  63. else
  64. arr[index] = data;
  65. }
  66.  
  67. // функция для получения элемента по любому индексу
  68. T get(int index)
  69. {
  70.  
  71. // если индекс вне диапазона
  72. if (index < current)
  73. return arr[index];
  74. }
  75.  
  76. // функция для удаления последнего элемента
  77. void pop() { current--; }
  78.  
  79. // функция для получения размера вектора
  80. int size() { return current; }
  81.  
  82. // функция для получения вместимости вектора
  83. int getcapacity() { return capacity; }
  84.  
  85. // функция для вывода элементов массива
  86. void print()
  87. {
  88. for (int i = 0; i < current; i++) {
  89. cout << arr[i] << " ";
  90. }
  91. cout << endl;
  92. }
  93. };
  94.  
  95. // главная функция
  96. int main()
  97. {
  98. vectorClass<int> v;
  99. vectorClass<char> v1;
  100. v.push(10);
  101. v.push(20);
  102. v.push(30);
  103. v.push(40);
  104. v.push(50);
  105. v1.push(71);
  106. v1.push(72);
  107. v1.push(73);
  108. v1.push(74);
  109.  
  110. cout << "Размер вектора : " << v.size() << endl;
  111. cout << "Вместимость вектора : " << v.getcapacity() << endl;
  112.  
  113. cout << "Элементы вектора : ";
  114. v.print();
  115.  
  116. v.push(100, 1);
  117.  
  118. cout << "\nПосле обновления 1 элемента : " << endl;
  119.  
  120. cout << "Элементы вектора типа int : " << endl;
  121. v.print();
  122. cout << "Элементы вектора типа char : " << endl;
  123. v1.print();
  124. cout << "Элементы в 1 индексе типа int : " << v.get(1)
  125. << endl;
  126. cout << "Элементы в 1 индексе типа char : "
  127. << v1.get(1) << endl;
  128.  
  129. v.pop();
  130. v1.pop();
  131.  
  132. cout << "\nПосле удаления последнего элемента" << endl;
  133.  
  134. cout << "Размер вектора типа int : " << v.size() << endl;
  135. cout << "Размер вектора типа char: " << v1.size()
  136. << endl;
  137. cout << "Вместимость вектора типа int : "
  138. << v.getcapacity() << endl;
  139. cout << "Вместимость вектора типа char : "
  140. << v1.getcapacity() << endl;
  141.  
  142. cout << "Элементы вектора типа int : ";
  143. v.print();
  144. cout << "Элементы вектора типа char: ";
  145. v1.print();
  146.  
  147. return 0;
  148. }
  149.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement