STL模板实现stack

9 篇文章 0 订阅
#include <iostream>
#include <stdexcept>
using namespace std;
//类模板
template<typename T=int>
class Stack{
private:
	T *elems;
	size_t size;
	size_t cap;
public:
	Stack(size_t cap = 10):cap(cap){
		elems = new T[cap];
		size = 0;
	}
	~Stack(){
		if(elems != NULL)
			delete [] elems;
		elems = NULL;
	}
	Stack(const Stack& s):elems(new T[s.cap]),size(s.size),cap(s.cap){
		for(int i=0;i<size;i++)
			elems[i] = s.elems[i];
	}
	Stack& operator=(const Stack& s){
		if(this != &s){
			Stack stmp(s);
			swap(stmp.elems,elems);//swap(stmp,*this); 调用 operator= 
			size = s.size;
			cap = s.cap;
		}	
		return *this;
	}
	bool full(){
		return size == cap;	
	}
	bool empty(){
		return size == 0;	
	}
	void push(const T& data){
		if(full()){
			throw overflow_error("栈上溢");	
		}
		elems[size++] = data;
	}
	T pop(){
		if(empty()){
			throw underflow_error("栈下溢");	
		}	
		return elems[--size];
	}
	T top(){
		if(empty()){
			throw underflow_error("栈下溢");	
		}	
		return elems[size-1];
	}
};

class Stu{};
int main(){
	Stack<> stack;
	//常引用
	int a;
	int& r = a;
	const int& rc = a;
	//int& r1 = 1;
	const int& r2 = 1;//常引用
	Stack<int> s(6);	
	Stack<double> s1;
	Stack<Stu> s2(5);
	s.push(1);
	s.push(2);
	s.push(3);
	s.push(4);
	s.push(5);
	s.push(6);
	try{
		s.push(4);
	}catch(overflow_error& e){
		cout << e.what() << endl;	
	}
	
	while(!s.empty()){
		cout << s.pop() << endl;	
	}

	return 0;	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HOVL_C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值