|
Программирование >> Операторы преобразования типа
Кроме того, из реализации были исключены операции, лишние для рядового пользователя стеков (например, операции сравнения). Полученный класс стека приведен ниже. cont/Stack.hpp 1 * ******************************************** * Stack,hpp * - более удобный и безопасный класс стека * *********************Sc************************************** j #ifndef STACKJPP #define STACK HPP finclude <deque> #include <exception> template <class T> class Stack { protected: std::deque<T> c: Контейнер дня хранения элементов public: /* Класс исключения, генерируемого функциями рорО и topO * при пустом стеке */ class ReadEmptyStack : public std::exception { public: virtual const char* whatO const throwO { return read empty stack : Количество элементов typename std::deque<T>::size type sizeO const { return C.sizeC); Проверка пустого стека bool empty С) const { return c,empty(): Занесение элемента в стек void push (const T& elem) { c.push back(elem): Извлечение элемента из стека с возвращением его значения Т pop О { if (C.emptyO) { throw ReadEmptyStackO; Т elein(c.back()); c.pop back(): return elem; Получение значения верхнего злемента Т& top О { if (C.emptyO) { throw ReadEmptyStackO; return c.backC); #endif /* STACK HPP */ При использовсшии этого класса стека предыдущий пример можно записать в следующем виде: cont/stack2.cpp Iinclude <iostreani> #1nclude Stack.hpp Использование нестандартного класса стека using namespace std; int mainO { try { Stack<int> st: Занесение трех элементов в стек st.push(l) st.push(2) st.push(3) Извлечение и вывод двух элементов из стека cout St.popO : cout St.popO : Модификация верхнего элемента St.topO = 77; Занесение двух новых элементов st.push(4): st.push(5): Извлечение одного эпемента без обработки St.popO: /* Извлечение и вывод трех элементов * - ОШИБКА: одного элемента не хватает cout St.popO ; cout St.popO endl; cout St.popO endl: catch (const exceptions e) { cerr EXCEPTION: e.whatO endl: При последнем вызове pop() нгшеренно допущена ошибка. В отличие от стандартного класса стека с неопределенным поведением наш класс генерирует исключение. Результат выполнения программы выглядит так: 3 2 4 77 EXCEPTION: read empty stack Очереди Класс queue о реализует очередь, работающую по принципу первым поступил, первым обслужен (FIFO). Функция push() заносит элементы в очередь (рис. 10.3), а функция рор() удаляет элементы в порядке их вставки. Следовательно, очередь может рассматриваться как классический буфер данных. Ьаск() frontO Рис. 10.3. Интерфейс очереди Чтобы использовать очередь в программе, необходимо включить заголовочный файл <queue>: finclude <queue> В файле <queue> класс queue определяется следующим образом: namespace std { template <class Т. class Container = deque<T> > class queue; В исходной версии STL очередь определялась в заголовочном файле <queue.h>.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |