堆栈改编自Deque Pointer?

时间:2016-10-25 14:26:20

标签: c++ pointers stack deque adapt

对于我的课程,我被要求创建一个Stack类,它将其元素存储在STL容器中(但不是STL堆栈容器)。

要求:

  • 必须能够存储任意类型的元素
  • 只要系统有足够的可用内存,
  • 每个实例都接受插入
  • 必须位于命名空间cop4530
  • 必须使用下面的头文件中显示的大多数方法和运算符重载     (不是回(),+ = op,[] ops)
  • 在.h中声明的方法/函数等,并在单独的.hpp
  • 中实现

然后我将该堆栈与我创建的另一个程序一起使用,将中缀表示法算法更改为后缀,并在所有元素都具有可比性的情况下对其进行评估。

我的教授给出了一个示例头文件示例,如下所示。

为什么他使用deque 指针? 我搜索并发现许多人将STL容器改编为堆栈的情况,但从未解释过STL容器指向堆栈。有人可以解释这个使用非指针的好处,如果有的话?示例帮助

示例.h声明文件

#ifndef COP4530_STACK_H
#define COP4530_STACK_H

#include <iostream>
#include <deque>

namespace cop4530
{

template <typename T>
class Stack;

//----------------------------------
//     Stack<T>
//----------------------------------

template <typename T>
class Stack
{
public:
  // Constructor, Copy-constructor and destructor
  Stack  ();
  Stack  (const Stack<T>&);
  Stack  (Stack<T> &&);
  ~Stack (); 

  // member operators
  Stack<T>& operator =  (const Stack<T>&);
  Stack<T> & operator=(Stack<T> &&);
  Stack<T>& operator += (const Stack<T>&);
  const T&         operator [] (int) const;
  T&               operator [] (int);

  // other methods
  int   size        () const;
  int   capacity    () const;

  // Container class protocol
  bool         empty     () const;
  void         clear     ();
  void         push      (const T&);
  void         push      (T &&);
  void         pop       ();
  T&           top       ();
  const T&     top       () const;
  T&           back      ();


  // Display methods 
  void print    (std::ostream& os, char ofc = ' ') const;

protected:
  std::deque<T>  *mystack;   // pointer to the stack.
//std::deque<T>   mystack;   //WHY NOT THIS???

} ;

// operator overloads
template < class T >
std::ostream& operator << (std::ostream& os, const Stack<T>& a);

template < class T >
bool      operator == (const Stack<T>&, const Stack<T>&); 

template < class T >
bool      operator != (const Stack<T>&, const Stack<T>&); 

template < class T >
bool      operator <= (const Stack<T>&, const Stack<T>&);

#include "stack.hpp"

}   // namespace cop4530
#endif

示例.hpp实现

#ifndef COP4530_STACK_HPP
#define COP4530_STACK_HPP

//----------------------------------------
//     Stack<T>:: Implementations
//----------------------------------------

// operator overloads

    template <typename T>
std::ostream& operator << (std::ostream& os, const Stack<T>& s)
{

}

    template <typename T>
bool operator<=(const Stack<T>& s1, const Stack<T>& s2)
{

}

    template <typename T>
bool operator == (const Stack<T>& s1, const Stack<T>& s2)
{

}

    template <typename T>
bool operator != (const Stack<T>& s1, const Stack<T>& s2)
{

}

// public methods

    template <typename T>
Stack<T>::Stack()
    //Constructor
{

}

    template <typename T>
Stack<T>::Stack(const Stack<T>& source)
    //Copy-constructor
{

}


template <typename T>
Stack<T>::Stack(Stack<T> && source)
{

}
    template <typename T>
Stack<T>::~Stack()         
    // destructor
{

}

    template <typename T>
Stack<T>& Stack<T>::operator = (const Stack<T>& source) 
    // assignment operator
{

}

template <typename T>
Stack<T>& Stack<T>::operator = (Stack<T> && source)
{

}

    template <typename T>
Stack<T>& Stack<T>::operator += (const Stack<T>& source) 
{

}

template <typename T>
const T& Stack<T>::operator [] (int i) const                 
// element operator
{

}

    template <typename T>
T& Stack<T>::operator [] (int i)
    // element operator
{

}

template <typename T>
bool Stack<T>::empty() const
{

}

template <typename T>
int Stack<T>::size() const
{

}

    template <typename T>
void Stack<T>::push(const T& Val)
{

}

template <typename T>
void Stack<T>::push(T && Val)
{

}

    template <typename T>
void Stack<T>::pop()
{

}

    template <typename T>
void Stack<T>::clear()
{

}

template <typename T>
T&  Stack<T>::top()
{

}

template <typename T>
const T&  Stack<T>::top() const
{

}

template <typename T>
T&  Stack<T>::back()
{

}

template <typename T>
void Stack<T>::print(std::ostream& os, char ofc) const
{

}

#endif

0 个答案:

没有答案