Программирование >>  Операторы преобразования типа 

1 ... 134 135 136 [ 137 ] 138 139 140 ... 239


Кроме того, из реализации были исключены операции, лишние для рядового пользователя стеков (например, операции сравнения). Полученный класс стека приведен ниже.

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>.



1 ... 134 135 136 [ 137 ] 138 139 140 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика