Часто бывает полезно обеспечить ограниченные интерфейсы контейнеров. Библиотека STL предоставляет stack, queue и priority_queue через адаптеры, которые могут работать с различными типами последовательностей. - Часто бывает полезно обеспечить ограниченные интерфейсы контейнеров. Библиотека STL предоставляет stack, queue и priority_queue через адаптеры, которые могут работать с различными типами последовательностей.
- Адаптировать - это значит приспосабливать. То есть приспосабливать существующую сущность, контейнер, итератор и т.д., в новом контексте или для частной задачи.
- Например, стандартный контейнер двусвязный список std::list имеет такие методы, как push_back, push_front, pop_back, pop_front, front, back.
- Используя лишь подмножество методов, предоставляемых контейнером std::list, можно смоделировать поведение такой структуры данных, как стек.
stack - Любая последовательность, поддерживающая операции back, push_back и pop_back, может использоваться для адаптации stack. В частности, могут использоваться vector, list и deque.
- template
- class stack {
- friend bool operator==(const stack& х,
- const stack & y);
- friend bool operator<(const stack& х,
- const stack & y);
- public:
- typedef Container::value_type value_type;
- typedef Container::size_type size_type;
-
protected: - protected:
- Container c;
- public:
- bool empty() const { return c.empty(); }
- size_type size() const { return c.size();}
- value_type& top() { return c.back(); }
- const value_type& top() const {return c.back();}
- void push(const value_type& х) { с.push_back(х);}
- void pop() {c.pop_back();}
- }; // class stack
-
- template
- bool operator==(const stack & х,
- const stack & y) {return х.с == у.с;}
- template
- bool operator<(const stack& х, const stack& y)
- {return х.с < у.с;}
- Например, stack > - целочисленный стек, сделанный из vector, а stack > - символьный стек, сделанный из deque.
Do'stlaringiz bilan baham: |