3 / 3 / 0
Регистрация: 13.12.2016
Сообщений: 99
|
|
1
|
Добавить меню в задачу
13.11.2017, 10:03. Показов 892. Ответов 0
Добавить в эту задачу с шаблоном класса,меню для проверки методов.
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
| #include <cassert>
#include <iostream>
using namespace std;
template<typename T>
class Queue
{
private:
T *queuePtr; // указатель на очередь
const int size; // максимальное количество элементов в очереди
int begin, // начало очереди
end; // конец очереди
int elemCT; // счетчик элементов
public:
Queue(int =10); // конструктор по умолчанию
Queue(const Queue<T> &); // конструктор копирования
~Queue(); // деструктор
void enqueue(const T &); // добавить элемент в очередь
T dequeue(); // удалить элемент из очереди
void printQueue();
};
// реализация методов шаблона класса Queue
// конструктор по умолчанию
template<typename T>
Queue<T>::Queue(int sizeQueue) :
size(sizeQueue), // инициализация константы
begin(0), end(0), elemCT(0)
{
// дополнительная позици поможет нам различать конец и начало очереди
queuePtr = new T[size + 1];
}
// конструктор копии
template<typename T>
Queue<T>::Queue(const Queue &otherQueue) :
size(otherQueue.size) , begin(otherQueue.begin),
end(otherQueue.end), elemCT(otherQueue.elemCT),
queuePtr(new T[size + 1])
{
for (int ix = 0; ix < size; ix++)
queuePtr[ix] = otherQueue.queuePtr[ix]; // копируем очередь
}
// деструктор класса Queue
template<typename T>
Queue<T>::~Queue()
{
delete [] queuePtr;
}
// функция добавления элемента в очередь
template<typename T>
void Queue<T>::enqueue(const T &newElem)
{
// проверяем, ести ли свободное место в очереди
assert( elemCT < size );
// обратите внимание на то, что очередь начинает заполняться с 0 индекса
queuePtr[end++] = newElem;
elemCT++;
// проверка кругового заполнения очереди
if (end > size)
end -= size + 1; // возвращаем end на начало очереди
}
// функция удаления элемента из очереди
template<typename T>
T Queue<T>::dequeue()
{
// проверяем, есть ли в очереди элементы
assert( elemCT > 0 );
T returnValue = queuePtr[begin++];
elemCT--;
// проверка кругового заполнения очереди
if (begin > size)
begin -= size + 1; // возвращаем behin на начало очереди
return returnValue;
}
template<typename T>
void Queue<T>::printQueue()
{
cout « "Очередь: ";
if (end == 0 && begin == 0)
cout « " пустая\n";
else
{
for (int ix = end; ix >= begin; ix--)
cout « queuePtr[ix] « " ";
cout « endl;
}
}
int main ()
{
Queue<char> myQueue(14); // объект класса очередь
myQueue.printQueue(); // вывод очереди
int ct = 1;
char ch;
// добавление элементов в очередь
while (ct++ < 14)
{
cin » ch;
myQueue.enqueue(ch);
}
myQueue.printQueue(); // вывод очереди
// удаление элемента из очереди
myQueue.dequeue();
myQueue.dequeue();
myQueue.dequeue();
myQueue.printQueue(); // вывод очереди
// cout « "\n\nСработал конструктор копирования:\n";
Queue<char> newQueue(myQueue);
newQueue.printQueue(); // вывод очереди
return 0;
} |
|
0
|