这篇文章主要为大家详细介绍了C++Stack栈类模版实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
1.栈的介绍
栈的实现方式分为3种
- 基于静态数组实现,内部预设一个很大的数组对象, 实现简单,缺点是空间受限。
- 基于动态数组实现,内部预设一个容量值,然后分配一段内存空间数组,如果入栈大于默认容量值时,则再次扩大分配新的内存数组,并将旧数组拷贝至新数组及释放旧数组.
- 基于双向循环链表实现
栈的函数需要实现如下所示:
T pop() :
出栈并返回栈顶元素void push(const T &t) :
入栈const T & top() const :
获取const类型栈顶元素T &top() :
获取栈顶元素int length() const:
获取数量(父类已经实现)void clear(): 清空栈(父类已经实现)
本章,我们实现的栈基于动态数组实现,它的父类是我们之前实现的Vector类:
C++ 动态数组模版类Vector实例详解
所以代码实现会非常简单.
2.栈实现
代码如下所示:
#ifndef Stack_H
#define Stack_H
#include "throw.h"
// throw.h里面定义了一个ThrowException抛异常的宏,如下所示:
//#include <iostream>
//using namespace std;
//#define ThrowException(errMsg) {cout<<__FILE__<<" LINE"<<__LINE__<<": "<<errMsg<<endl; (throw errMsg);}
#include "Vector.h"
template<class T>
class Stack : public Vector<T>
{
public:
T pop()
{
if(Vector<T>::isEmpty()) { // 如果栈为空,则抛异常
ThrowException("Stack is empty ...");
}
T t = Vector<T>::data()[Vector<T>::length() - 1];
Vector<T>::resize(Vector<T>::length() - 1);
return t;
}
// 入栈,实际就是append尾部添加成员
void push(const T &t)
{
Vector<T>::append(t);
}
T &top()
{
if(Vector<T>::isEmpty()) {
ThrowException("Stack is empty ...");
}
return Vector<T>::data()[Vector<T>::length() - 1];
}
const T &top() const
{
if(Vector<T>::isEmpty()) {
ThrowException("Stack is empty ...");
}
return Vector<T>::data()[Vector<T>::length() - 1];
}
};
#endif // Stack_H
3.代码测试
int main(int argc, char *argv[])
{
Stack<int> stack;
cout<<"******* current length:"<<stack.length()<<endl;
for(int i = 0; i < 5; i++) {
cout<<"stack.push:"<<i<<endl;
stack.push(i);
}
cout<<"******* current length:"<<stack.length()<<endl;
while(!stack.isEmpty()) {
cout<<"stack.pop:"<<stack.pop()<<endl;
}
return 0;
}
运行打印:
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程学习网的更多内容!
沃梦达教程
本文标题为:C++Stack栈类模版实例详解


猜你喜欢
- C语言详解float类型在内存中的存储方式 2023-03-27
- C++ 数据结构超详细讲解顺序表 2023-03-25
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- Easyx实现扫雷游戏 2023-02-06
- Qt计时器使用方法详解 2023-05-30
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- ubuntu下C/C++获取剩余内存 2023-09-18
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- C语言qsort()函数的使用方法详解 2023-04-26