C++关于模版的有关问题
C++关于模版的问题
下边这题怎么写啊,求大侠帮忙!!!
根据整数栈的定义,可抽象出的栈类模板为:
template<class T>
class Stack{
public:
Stack();
~Stack();
void Push(T& n);
T Pop();
private:
static const int SIZE;
T* stack;
int tos;
};
这里需要将该模板中的各成员函数进行定义即可。tos是栈顶位置,Push()为压栈操作,Pop()为弹栈操作,要在这两个操作中分别考虑栈的长度和栈是否为空。最后,要在main函数中对编写的栈类模板进行测试。
------解决方案--------------------
类似代码很多的。。自己GOOGLE一下不就完了。。
我随便写了个链栈,最简化的,你可以参考下。
下边这题怎么写啊,求大侠帮忙!!!
根据整数栈的定义,可抽象出的栈类模板为:
template<class T>
class Stack{
public:
Stack();
~Stack();
void Push(T& n);
T Pop();
private:
static const int SIZE;
T* stack;
int tos;
};
这里需要将该模板中的各成员函数进行定义即可。tos是栈顶位置,Push()为压栈操作,Pop()为弹栈操作,要在这两个操作中分别考虑栈的长度和栈是否为空。最后,要在main函数中对编写的栈类模板进行测试。
------解决方案--------------------
类似代码很多的。。自己GOOGLE一下不就完了。。
我随便写了个链栈,最简化的,你可以参考下。
- C/C++ code
template <typename T> class StackWithLi { private: struct StackNode { T data; StackNode *next; StackNode(const T &d , StackNode *const n): data(d) , next(n){} }; StackNode *top; public: StackWithLi() : top(0){} void push(const T &); T pop(); bool isEmpty(){ return top == nullptr ;} }; template <typename T> T StackWithLi<T>::pop() { if (isEmpty()) { cout<<"The stack is empty!"<<endl; exit(0); } else { StackNode *p = top; T temp = top->data; top = top->next; delete p; return temp; } } template <typename T> void StackWithLi<T>::push( const T &d ) { StackNode *node = new StackNode(d , top); top = node; }
------解决方案--------------------
就像一楼所说的,注意两点就行了:
一是函数前面要template<typename T>
二是类型名是Stack<T>
像你这种有个static const int SIZE的,不如将SIZE当作非类型的模板参数,定义
template<typename T, int SIZE>
class Stack {
//....
};
这样可能更好。
------解决方案--------------------