#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;
}
STL模板实现stack
最新推荐文章于 2022-05-09 11:14:21 发布