c++ template 实现一个简单的"栈"
一: 实现一个简单的swap
原来我们写swap一定会这样写:
对于int类型的:
swap(const int &x,const int &y) {
int temp;
temp = x;
x = y;
y = temp;
}
对于double类型的:
swap(const double &x,const double &y) {
double temp;
temp = x;
x = y;
y = temp;
}
我们发现两个函数几乎是相同的,但是为了实现功能我们不得不定义两个函数。但是用c++的template,我们就可以只定义一个函数模板。而不是为每种类型都定义一个新的函数。函数模板这样定义:
template<模板参数1,模板参数2…>
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
template<typename T> void swap(T& t1,T& t2){
T temp;
temp = t1;
t1 = t2;
t2 = temp;
}
int main(int argc,char *argv[])
{
int num1 = 1,num2 = 2;
swap<int>(num1,num2);
cout << num1 << " " << num2 << endl;
return 0;
}
二:实现”栈”
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
template<class T> class stack{
public:
stack();
~stack();
void push(T t);
T pop();
bool isempty();
bool isfull();
private:
T *m_PT;
int m_maxsize;
int m_size;
};
template<class T> stack<T>::stack() {
m_maxsize = 100;
m_size = 0;
m_PT = new T[m_maxsize];
}
template<class T> stack<T>::~stack() {
m_maxsize = m_size = 0;
delete[] m_PT;
}
template<class T> void stack<T>::push(T t) {
if(!isfull()) {
m_PT[m_size++] = t;
}else {
cout << "the stack is full" << endl;
}
}
template<class T> T stack<T>::pop() {
if(!isempty()) {
T t = m_PT[--m_size];
return t;
}else {
cout << "the stack is empty" << endl;
}
}
template<class T> bool stack<T>::isempty() {
return m_size <= 0;
}
template<class T> bool stack<T>::isfull() {
return m_size >= m_maxsize;
}
int main(int argc,char *argv[])
{
stack<int> stack1;
stack<std::string> stack2;
stack1.push(1);
stack1.push(2);
stack1.push(3);
stack2.push("a");
stack2.push("d");
stack2.push("b");
stack2.push("c");
while(!stack1.isempty()) {
cout << stack1.pop() << endl;
}
while(!stack2.isempty()) {
cout << stack2.pop() << endl;
}
return 0;
}
c++ template 实现一个简单的"栈"的更多相关文章
- Objective-C实现一个简单的栈
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出 ...
- 一个简单地template模板
之前的项目中用到了artTemplate模板,感觉挺有意思,于是查看相关资料,自己动手写了个简单地template模板插件.虽然会有一些不足,但也是自己的一番心血.主体代码如下 /* * 一个简单地t ...
- 【WPF】学习笔记(一)——做一个简单的电子签名板
参加实习(WPF)已经有两个多周的时间了,踩了一些坑,也算积累了一些小东西,准备慢慢拿出来分享一下.(●'◡'●) 这次呢就讲讲一个简单的电子签名板的实现. 先上张图(PS:字写得比较丑,不要太在意哈 ...
- 一个简单的PHP模板引擎
PHP早期开发中通常是PHP代码和HTML代码混写,这也使代码中充斥着数据库操作,逻辑处理等.当项目不大时,这样的代码还可以接受,但是随着项目不断扩大,我们就会发现同一个文件中同时存在前端逻辑和后端处 ...
- 【UI插件】开发一个简单日历插件(上)
前言 最近开始整理我们的单页应用框架了,虽然可能比不上MVVM模式的开发效率,也可能没有Backbone框架模块清晰,但是好歹也是自己开发出来 而且也用于了这么多频道的东西,如果没有总结,没有整理,没 ...
- 如何创建一个简单的C++同步锁框架(译)
翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...
- Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序
题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的.比如输入的push 序列是1. ...
- Quartz2D之绘制一个简单的机器猫
学习iOS有一段时间了,在博客园也默默的潜水了两个月,见识了很多大神,收获不少. 今天整理笔记,发现忘记的不少,我感觉需要及时的整理一下了,同时也把做的小东西贴上来和大家分享一下. 最近学习了Quar ...
- 一个简单算法题引发的思考<DNA sorting>(about cin/template/new etc)
首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...
随机推荐
- Shell系列(15)- 数值运算方法
数值运算-方法1 declare -i [root@localhost ~]# aa=11 [root@localhost ~]# aa=22 #给变量aa和bb赋值 [root@localhos ...
- springboot pom.xml
Demo project for Spring Boot <?xml version="1.0" encoding="UTF-8"?> <pr ...
- markdown写作系统
markdown 电脑本地使用typora,可保存为md文件直接上传到有道云笔记中 直接使用博客园做为图床,可以存为草稿,然后把复制连接 有道云笔记 粘贴博客园的图片连接
- Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】
正题 题目链接:https://loj.ac/p/2769 题目大意 给出\(n\)个点\(m\)条地铁线路,每条线路是一条路径. 求\(1\)到\(n\)的最短路且在最短路径的情况下相邻换乘点的距离 ...
- 基于预计算的全局光照(Global Illumination Based On Precomputation)
目录 基于图像的光照(Image Based Lighting,IBL) The Split Sum Approximation 过滤环境贴图 预计算BRDF积分 预计算辐射度传输(Precomput ...
- B站视频:CocosCreator Bundle 特性三个实例详解,轻松实现大厅子游戏模式
详细内容:https://forum.cocos.org/t/topic/112146
- html行内元素
定义 行内元素只占据它对应标签的边框所包含的空间,没有换行效果 div{ /* 定义行内元素*/ display:inline } 特点 多个元素可以横排显示 不支持宽高和上下margin 支持pad ...
- 沟谷网络的提取及沟壑密度的计算(ArcPy实现)
一.背景 沟壑密度是描述地面被水道切割破碎程度的一个指标.沟壑密度是气候.地形.岩性.植被等因素综合影响的反映.沟壑密度越大,地面越破碎,平均坡度增大,地表物质稳定性降低,且易形成地表径流,土壤侵蚀加 ...
- FFT 的一些技巧
三次变两次 FFT 我们发现: \[(F(x)+iG(x))^2=F(x)^2-G(x)^2+2iF(x)G(x) \] 也就是说,我们把 \(F(x)\) 作为实部,\(G(x)\) 作为虚部,那么 ...
- python编写学习助手0
项目原因 为了解决学习知识后不及时复习而导致遗忘的问题,准备写一个桌面助手,采用艾宾浩斯记忆法,对每次学习的内容排布复习计划. 第一步是做出最简单的文本列表,里面是待办事项,每个复习待办事项都会有符合 ...