尝试使用模板类,实现顺序栈。
#include <iostream>
#define MAX 8
using namespace std;
typedef struct{
int a;
int b;
}test_t;
template <typename T>
class Stack
{
private:
T *data;
int top;
public:
Stack() :data(nullptr),top(-1){}
//创建顺序栈
int create_stack();
//出栈
int pop_stack();
//入栈
int push_stack(T data);
//遍历
int show_stack();
//释放顺序表
int free_stack();
};
template <typename T>
int Stack<T>::create_stack(){
this->data=new T[MAX];
this->top=-1;
return 0;
}
template <typename T>
int Stack<T>::pop_stack(){
if(this->data==nullptr||this->top==-1){
cout<<"入参错误"<<endl;
return -1;
}
cout<<this->data[this->top]<<endl;
this->top--;
return 0;
}
template <typename T>
int Stack<T>::push_stack(T data){
if(this->data==nullptr){
cout<<"入参错误"<<endl;
return -1;
}
top++;
this->data[this->top]=data;
return 0;
}
void show(test_t data){
cout<<"a="<<data.a<<" "<<"b="<<data.b<<endl;
}
template <typename T>
int Stack<T>::show_stack(){
if(this->data==nullptr){
cout<<"入参错误"<<endl;
return -1;
}
for(int i=this->top;i>=0;i--){
show(*(data+i));
}
return 0;
}
template <typename T>
int Stack<T>::free_stack(){
if(this->data==nullptr){
cout<<"入参错误"<<endl;
return -1;
}
delete []this->data;
return 0;
}
int main()
{
Stack<test_t> s;
test_t t1={10,20};
test_t t2={30,40};
test_t t3={50,60};
s.create_stack();
s.push_stack(t1);
s.push_stack(t2);
s.push_stack(t3);
s.show_stack();
// s.pop_stack();
s.free_stack();
return 0;
}
异常处理
#include <iostream>
using namespace std;
int fun(int a,int b){
if(0==b){
throw int(1);
}
return a/b;
}
int main()
{
try {
fun(2,0);
} catch (int a) {
if(a==1){
cout<<"除数为0"<<endl;
}
}
cout<<"hello"<<endl;
return 0;
}