c++ 模板学习笔记:用数组和类模板模拟通用栈(权哥)
来源:互联网 发布:js的confirm和alert 编辑:程序博客网 时间:2024/04/27 11:49
初学c++模板类,此处拾人牙慧,用数组和类模板模拟通用栈
#include <iostream>#include <typeinfo>#include <string>#include <cstring>#include <exception>using namespace std;template <typename T=int,int len=10>class stack{T a[len];int cur;public:stack():cur(0){}const char* element(){return typeid(T).name();}int max_size(){return len;}bool empty(){return cur==0;}bool full(){return cur==len;}int size(){return cur;}void push(const T& d)throw(const char*){if(full()) throw("full");a[cur++]=d;}T pop() throw(const char*){if(empty()) throw("empty");return a[--cur];}const T& top(){return a[cur-1];};void clear(){cur=0;}};template <int len>class stack<const char*,len>{string a[len];int cur;public:stack():cur(0){}const char* element(){return "const char*";}int max_size(){return len;}bool empty(){return cur==0;}bool full(){return cur==len;}int size(){return cur;}void push(const char *d)throw(const char*){if(full()) throw("full");a[cur++]=d;}const char* pop() throw(const char*){if(empty()) throw("empty");return a[--cur].c_str();}/*如果返回const char*& 会编译出错:error: invalid initialization of non-const reference of type ‘const char*&’ from a temporary of type ‘const char*’.如果返回const char* const& 编译不报错,会有warning: returning reference to temporary*/const char* const& top() throw(const char*){if(empty()) throw("empty");return a[cur-1].c_str();}void clear(){cur=0;}};int main(){stack<int> si;si.push(1);si.push(2);si.push(3);si.push(4);cout << "top:" << si.top() << endl;cout << "element type:" << si.element() << endl;cout << "max_size:" << si.max_size() << ',' << "size:" << si.size() << endl;while(!si.empty()) cout << si.pop() << ' ';cout << "\n===============================\n";stack<char,15> sc;sc.push('+');sc.push('-');sc.push('*');sc.push('/');cout << "top:" << sc.top() << endl;cout << "element type:" << sc.element() << endl;cout << "max_size:" << sc.max_size() << ',' << "size:" << sc.size() << endl;while(!sc.empty()) cout << sc.pop() << ' ';cout << "\n===============================\n";stack<const char*> scp;char buf[20];while(1){cin >> buf;if(!strcmp(buf,"end")) break;scp.push(buf);}cout << "element type:" << scp.element() << endl;cout << "max_size:" << scp.max_size() << ',' << "size:" << scp.size() << endl;cout << "top:" << scp.top() << endl;while(!scp.empty()) cout << scp.pop() << ' ';cout << "\n===============================\n";return 0;}
- c++ 模板学习笔记:用数组和类模板模拟通用栈(权哥)
- c++ 模板学习笔记:函数模板实现数组通用排序和遍历打印(权哥)
- c++ 模板学习笔记:类模板模拟auto_ptr智能指针(权哥)
- c++ 模板学习笔记:类模板和函数模板实现pair(权哥)
- View类通用模板(C#)
- C++通用模板类(学习版)
- CArray 动态数组模板类学习笔记
- 模板和学习笔记
- 【c++】模板和模板类
- 模板之类模板(数组类模板)
- C++primer学习:类模板(2)类模板:模板参数,成员模板和控制实例化
- 模板类 通用数组的实现
- C++学习笔记--数组类模板、智能指针模板、单例类模板
- 用数组模拟大数加法模板
- C++学习笔记(一)函数模板与类模板
- C++基础学习笔记:自定义数组模板类
- C++,template,类模板和函数模板
- C/C++ 通用 Makefile模板
- 有趣么
- Android包(android.view.animation)的简介
- 环绕增强MethodInterceptor接口
- Java NIO Tutorial 3- Java NIO Channel
- Nginx学习第一篇: 认识Nginx以及准备工作
- c++ 模板学习笔记:用数组和类模板模拟通用栈(权哥)
- NYOJ 929 密码宝盒 || HDU 1226 超级密码
- 比特币印象
- [Cocos2D]如何创建Cocos2D-X的项目(版本号2.2)
- MVVM模式WPF计算器
- td div等标签的可编辑属性
- (转)Android之Service与IntentService的比较
- 相机中的HDR和WDR分别指的是什么?
- 使用母版页后怎么在子页中使用独立的样式表