cha*_*ers 1 c++ stack templates
我下面有一些代码。这段代码是我创建的一个基本的推入/弹出堆栈类,作为使某人能够推入/弹出堆栈的模板。我有一个作业分配,现在我想做的是创建一个具有多个值的堆栈。
因此,我希望能够创建一个基本上可以发送三个整数的堆栈,也可以在其中推入/弹出这些整数。我要寻找的是关于该如何工作的理论,而我并不想让别人替我做家庭作业。
场景是我们正在处理零件。因此,用户将输入序列号(int),生产日期(int)和lotnum(int)。所以我的问题是:
我是否应该尝试使用类似类之类的结构来创建新类?
/****************************************************************************
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;
}
Run Code Online (Sandbox Code Playgroud)您可以创建一个由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;
Run Code Online (Sandbox Code Playgroud)