C/C++

C++ класс Реализация класс стека,

Приведено следующее определение:
class Element {
friend class Stack; Element* prev;
int data1,data2;
public:
Element(int d1=0,int d2=0,
Element* pr=NULL)
:data1(d1),data2(d2),prev(pr){}
void Show()
{ cout<<data1<<' '<<data2<<endl;}
};
Реализация класс стека, в котором объекты хранятся
(элементы-это пары целых чисел):
Поля:
 указатель будет содержать на вершине (элемент * типа):
Методы и глобальные функции.
 конструктор, который создает пустой больнице,
 рабочая конструктор,
 деструкторы,
 функция под названием push, которая добавлена в хранилище-
рисует новый элемент,
 pop имя функция, которая удаляет содержат
Пиковый Элемент,
 getd1 имя функция, которая возвращает резервное копирование-
первое целое число вершины Наки,
 getd2 функция, которая возвращает резервное копирование-
второе целое число вершины Наки,
 оператор= (приписать действие),
 operator==, operator!= (два Хранителя-
функции меммации),
 функция вывода на хранение, начиная с вершины
вывод содержимого:
Вот вам годный стек...

template<typename Type>
class Stack {
public:
Stack(Stack&&) = delete;
Stack& operator=(Stack&&) = delete;
Stack() : n(0U), m(8U), stack(new Type[m]) {}
Stack(const Stack& st) : n(st.n), m(st.m), stack(new Type[st.m]) {
for (auto i = 0U; i < n; ++i) stack[i] = st.stack[i];
}
~Stack() {
if (stack != nullptr) {
delete[] stack;
stack = nullptr;
}
}
Stack& operator=(const Stack& st) {
if (this != &st) {
delete[] this->stack;
this->m = st.m;
this->n = st.n;
this->stack = new Type[this->m];
for (auto i = 0U; i < this->n; ++i) this->stack[i] = st.stack[i];
}
return *this;
}
size_t size()const {
return n;
}
size_t capacity()const {
return m;
}
bool empty()const {
return n == 0U;
}
void push(const Type& x) {
if (n == m) {
m <<= 1;
auto tmp = new Type[m];
for (auto i = 0U; i < n; ++i) tmp[i] = stack[i];
delete[] stack;
stack = new Type[m];
for (auto i = 0U; i < n; ++i) stack[i] = tmp[i];
delete[] tmp;
}
stack[n] = x;
++n;
}
void pop() {
--n;
}
Type& top() {
return stack[n - 1U];
}
private:
size_t n;
size_t m;
Type* stack;
friend bool operator<(const Stack<Type>& a, const Stack<Type>& b) {
auto n = a.size() < b.size() ? a.size() : b.size();
for (auto i = 0U; i < n; ++i) if (a.stack[i] < b.stack[i]) return true;
return a.size() < b.size();
}
friend bool operator==(const Stack<Type>& a, const Stack<Type>& b) {
auto n = a.size() < b.size() ? a.size() : b.size();
for (auto i = 0U; i < n; ++i) if (a.stack[i] != b.stack[i]) return false;
return a.size() == b.size();
}
friend bool operator<=(const Stack<Type>& a, const Stack<Type>& b) {
return a < b || a == b;
}
friend bool operator!=(const Stack<Type>& a, const Stack<Type>& b) {
return !(a == b);
}
friend bool operator>=(const Stack<Type>& a, const Stack<Type>& b) {
return !(a < b);
}
friend bool operator>(const Stack<Type>& a, const Stack<Type>& b) {
return !(a <= b);
}
};

P.S. А со своими целыми числами вершин Наки вы, я надеюсь, в пустой больнице разберётесь.
Костя Чунту
Костя Чунту
86 684
Лучший ответ