Das Adaptermuster implementiert Stack und Queue

Was ist ein Adaptermuster?

Adapter ist ein Entwurfsmuster (ein Entwurfsmuster ist eine Reihe von Code-Entwurfserfahrungen, die wiederholt verwendet werden, den meisten Menschen bekannt, klassifiziert und katalogisiert sind). Dieses Muster konvertiert die Schnittstelle einer Klasse in eine andere, die der Kunde wünscht. Schnittstelle.

Die zugrunde liegende Struktur von Stapel und Warteschlange in der STL-Standardbibliothek

Obwohl Elemente auch in Stapeln und Warteschlangen gespeichert werden können, werden sie in STL nicht in Container klassifiziert. Stattdessen werden sie als Containeradapter bezeichnet. Dies liegt daran, dass Stapel und Warteschlangen lediglich die Schnittstellen anderer Container umschließen. STL In Stapel und Warteschlange ist Deque standardmäßig verwendet.
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Simulationsimplementierung des Stapels

#include <iostream>
#include <deque>
using namespace std;
namespace zha123
{
    
    
	template<class T, class Container = deque<T>>
	class stack
	{
    
    
	public:
		void push(const T& val)
		{
    
    
			_con.push_back(val);
		}
		void pop()
		{
    
    
			_con.pop_back();
		}
		T& top()
		{
    
    
			return _con.back();
		}
		size_t size()
		{
    
    
			return _con.size();
		}
		bool empty()
		{
    
    
			return _con.empty();
		}
	private:
		Container _con;
	};
}

Simulationsimplementierung der Warteschlange

#include <iostream>
#include <deque>
using namespace std;
namespace zha123
{
    
    
    template<class T, class Container = deque<T>>
    class queue
    {
    
    
    public:
        void push(const T& x)
        {
    
    
            _con.push_front(x);
        }
        void pop()
        {
    
    
            _con.pop_back();
        }
        T& back()
        {
    
    
            return _con.back();
        }
        const T& back()const
        {
    
    
            return _con.back();
        }
        T& front()
        {
    
    
            return _con.front();
        }
        const T& front()const
        {
    
    
            return _con.front();
        }
        size_t size()const
        {
    
    
            return _con.size();
        }
        bool empty()const
        {
    
    
            return _con.empty();
        }
    private:
        Container _con;
    };
}

Guess you like

Origin blog.csdn.net/m0_72482689/article/details/132433770