1

以下にいくつかのコードがあります。このコードは、誰かがスタックをプッシュ/ポップできるようにするためのテンプレートとして作成した基本的なプッシュ/ポップスタッククラスです。私には宿題があり、今やろうとしているのは、複数の値を持つスタックを作成することです。

したがって、基本的に3つの整数を送信でき、これらもプッシュ/ポップできるスタックを作成できるようにしたいと思います。私が探しているのは、これがどのように機能するかについての理論であり、誰かに宿題をしてもらうつもりはありません。

シナリオは、パーツを扱っているというものです。したがって、ユーザーはシリアル番号(int)、製造日(int)、およびlotnum(int)を入力します。だから私の質問は:

  1. 値を「ポップ」するとき、ポップ中に3つの値すべてを送信しようとするか、これを別の方法で処理する必要がありますか?
  2. クラスなどの構造体を使用して新しいクラスを作成する必要がありますか?

    /****************************************************************************
    Inventory class.
    
    Chad Peppers
    
    This class creates a object for stacking nodes
    
    In addition, there should be member functions to perform the following 
    operations:
    - Push to the stack
    - Pop to the stack
    - Function to check if empty
    
    ****************************************************************************/
    // Specification file for the DynIntStack class
    
    template <class T>
    class Inventory
    {
    private:
       // Structure for stack nodes
       struct StackNode
       {
          T value;        // Value in the node
          StackNode *next;  // Pointer to the next node
       };
    
       StackNode *top;      // Pointer to the stack top
    
    public:
       // Constructor
       Inventory()
          {  top = NULL; }
    
       // Destructor
       ~Inventory();
    
       // Stack operations
       void push(T);
       void pop(T &);
       bool isEmpty();
    }; 
    
    /*************************************************************************
    Basic class constructor.
    
    Input Parameters:  Information to build the  stack
    
    Return Type:  void
    
    *************************************************************************/
    
    template<class T>
    Inventory<T>::~Inventory()
    {
       StackNode *nodePtr, *nextNode;
    
       // Position nodePtr at the top of the stack.
       nodePtr = top;
    
       // Traverse the list deleting each node.
       while (nodePtr != NULL)
       {
          nextNode = nodePtr->next;
          delete nodePtr;
          nodePtr = nextNode;
       }
    }
    
    /*************************************************************************
    Function to push an item in the stack
    
    Input Parameters:  T
    
    Return Type:  void
    
    *************************************************************************/
    
    template<class T>
    void Inventory<T>::push(T num)
    {
       StackNode *newNode; // Pointer to a new node
    
       // Allocate a new node and store num there.
       newNode = new StackNode;
       newNode->value = num;
    
       // If there are no nodes in the list
       // make newNode the first node.
       if (isEmpty())
       {
          top = newNode;
          newNode->next = NULL;
       }
       else  // Otherwise, insert NewNode before top.
       {
          newNode->next = top;
          top = newNode;
       }
    }
    
    /*************************************************************************
    Function to pop an item in the stack
    
    Input Parameters:  T
    
    Return Type:  void
    
    *************************************************************************/
    template<class T>
    void Inventory<T>::pop(T &num)
    {
       StackNode *temp; // Temporary pointer
    
       // First make sure the stack isn't empty.
       if (isEmpty())
       {
          cout << "The stack is empty.\n";
       }
       else  // pop value off top of stack
       {
          num = top->value;
          temp = top->next;
          delete top;
          top = temp;
       }
    }
    
    /*************************************************************************
    Basic class deconstructor.
    
    Input Parameters:  None
    
    Return Type:  void
    
    *************************************************************************/
    template<class T>
    bool Inventory<T>::isEmpty()
    {
       bool status;
    
       if (!top)
          status = true;
       else
          status = false;
    
       return status;
    }
    
4

1 に答える 1

5

3つのint値の集計である構造体を作成し、これらの行でその構造体の何かのテンプレートインベントリをインスタンス化できます。

#include "Inventory.h"
//create an aggregate structure
struct ProductData {
   int serial_num;
   int manufacture_date;
   int lot_num;
}

//instantiate Inventory for ProductData

Inventory<ProductData> stack;
于 2012-04-22T22:52:52.517 に答える