Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Usain
0 / 0 / 0
Регистрация: 20.11.2012
Сообщений: 33
#1

стеки - C++

27.12.2013, 21:33. Просмотров 401. Ответов 1
Метки нет (Все метки)

Здравствуйте. Я создал шаблон класса стек.
Как мне перегрузить операторы -- и += для извлечение и добавление элемента в стек. И нужно обработать исключительные ситуации возникающие при добавление элементов в стек (т.е. когда стек полон)

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
#ifndef STACK_H
#define STACK_H
*
#include <cassert> // для assert
#include <iostream>
*
#include <iomanip> // для setw
*
template <typename T>
class Stack
{
private:
****T *stackPtr;********************* // указатель на стек
****const int size;****************** // максимальное количество элементов в стеке
****int top;************************* // номер текущиго элемента стека
public:
****Stack(int = 10);***************** // по умолчанию размер стека равен 10 элементам
****Stack(const Stack<T> &);********* // конструктор копирования
****~Stack();************************ // деструктор
*
****inline void push(const T & );**** // поместить элемент в вершину стека
****inline T pop();****************** // удалить элемент из вершины стека и вернуть его
****inline void printStack();******** // вывод стека на экран
****inline const T &Peek(int ) const; // n-й элемент от вершины стека
****inline int getStackSize() const;* // получить размер стека
****inline T *getPtr() const;******** // получить указатель на стек
****inline int getTop() const;******* // получить номер текущего элемента в стеке
};
*
// реализация методов шаблона класса STack
*
// конструктор Стека
template <typename T>
Stack<T>::Stack(int maxSize) :
****size(maxSize) // инициализация константы
{
****stackPtr = new T[size]; // выделить память под стек
****top = 0; // инициализируем текущий элемент нулем;
}
*
// конструктор копирования
template <typename T>
Stack<T>::Stack(const Stack<T> & otherStack) :
****size(otherStack.getStackSize()) // инициализация константы
{
****stackPtr = new T[size]; // выделить память под новый стек
****top = otherStack.getTop();
*
****for(int ix = 0; ix < top; ix++)
********stackPtr[ix] = otherStack.getPtr()[ix];
}
*
// функция деструктора Стека
template <typename T>
Stack<T>::~Stack()
{
****delete [] stackPtr; // удаляем стек
}
*
// функция добавления элемента в стек
template <typename T>
inline void Stack<T>::push(const T &value)
{
****// проверяем размер стека
****assert(top < size); // номер текущего элемента должен быть меньше размера стека
*
****stackPtr[top++] = value; // помещаем элемент в стек
}
*
// функция удаления элемента из стека
template <typename T>
inline T Stack<T>::pop()
{
****// проверяем размер стека
****assert(top > 0); // номер текущего элемента должен быть больше 0
*
****stackPtr[--top]; // удаляем элемент из стека
}
*
// функция возвращает n-й элемент от вершины стека
template <class T>
inline const T &Stack<T>::Peek(int nom) const
{
**//
**assert(nom <= top);
*
**return stackPtr[top - nom]; // вернуть n-й элемент стека
}
*
// вывод стека на экран
template <typename T>
inline void Stack<T>::printStack()
{
****for (int ix = top - 1; ix >= 0; ix--)
********cout << "|" << setw(4) << stackPtr[ix] << endl;
}
*
// вернуть размер стека
template <typename T>
inline int Stack<T>::getStackSize() const
{
****return size;
}
*
// вернуть указатель на стек (для конструктора копирования)
template <typename T>
inline T *Stack<T>::getPtr() const
{
****return stackPtr;
}
*
// вернуть размер стека
template <typename T>
inline int Stack<T>::getTop() const
{
****return top;
}
#endif // STACK_H
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2013, 21:33     стеки
Посмотрите здесь:

Стеки на С! - C++
Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавлять...

Стеки С++ - C++
Добрый вечер.Задание следующие нужно сделать добавление в стек после елемента L.Дано 2 стека X Y из них добавить верхушку с X в Z до...

Стеки - C++
Сделал очередь, а вот кольцевой не получается, подскажите как сделать. #include &lt;iostream&gt; using namespace std; int main() { ...

Стеки - C++
Реализовать программу, в которой будут использоваться стеки (магазинный и кольцевой) и очередь. В самих программах реализовать такие...

Стеки - C++
может у кого то уже есть готовая или кому то интересно написать буду оочень благодарен Создать два стека для символов....

Стеки - C++
Создать проект, демонстрирующий работу со стеком, организованным на основе списка. Все операции со стеком реализовать через функции....

Стеки - C++
Подскажите пожалуйста, как сформировать новый стек с парными елементами и вывести его на экран? #include &quot;stdafx.h&quot; #include...

Стеки в С - C++
Не как не могу разобраться со стеками, помогите пожалуйста. Нужно написать в С. Задание: С помощью одномерного массива организуйте стек...

стеки в С++ - C++
помогите пожалуйста! Мне нужно написать програму в С++ с использованием STL. Условие таково: вывести строку в обратном направлении. Но...

Стеки - C++
Ребята, помогите, пожалуйста. Нужно реализовать стек. Заранее благодарю! Ім'я процедури Кількість параметрів Параметри (по 2 байти) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
2945 / 1289 / 238
Регистрация: 19.01.2009
Сообщений: 3,366
Завершенные тесты: 1
28.12.2013, 00:44     стеки #2
Stack.h
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
// ...
#include <exception> // for std::runtime_error
 
// ...
 
class StackOverflow : public std::runtime_error {
public:
    explicit StackOverflow(const char * msg = "stack overflow")
    : std::runtime_error(msg) {}
};
 
template<class T> class Stack {
//...
 
public:
    void operator+=(const T&) {
        if (top >= size) throw StackOverflow();
        this->push(t);
    }
    T operator--() {
        if (top <= 0) throw StackOverflow();
        return this->pop();
    }
};
 
// ...
использование (писал в GTest):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TEST(Stack, exception) {
    Stack<int> stk;
 
    std::cout << "try read from empty stack... ";
    try {
        int i = --stk;
        std::cout << "I read this from empty stack " << i << std::cout;
    }
    catch(const StackOverflow & e) {
        std::cout << "oops, catched " << e.what() << std::endl;
    }
 
    std::cout << "try insert 99 items... ";
    try {
        for (int i = 0; i < 99; stk += i++);
    }
    catch(const StackOverflow & e) {
        std::cout << "oops, catched " << e.what() << std::endl;
    }
 
    std::cout << "result statck" << std::endl;
    stk.printStack();
}
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru