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网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...
随机推荐
- Jmeter扩展组件开发(5) - 初始化方法的作用与实现
CODE //URLNAME 就是在图形化界面当中显示的变量名称private static final String URLNAME = "URL";//设置界面当中默认显示的变 ...
- Linux系列(35) - 光盘yum源搭建(2)
光盘搭建yum源 背景 当前Linux服务器没有网络,yum源下载好了,在光盘中 step-01 挂载光盘 mkdir /mnt/cdrom #建立挂载点 mount /dev/cdrom /mnt/ ...
- Java面向对象系列(12)- Static关键字讲解
场景一:静态变量 package oop.demo07; public class Student { private static int age;//静态的变量 一般多线程用的比较多 privat ...
- Charles安装https证书
Charles抓取https的包,出现unknow,需要安装https证书.
- WireShark基础用法
特点 免费 开源 跨平台 抓包原理 内部原理 抓取网卡 抓包环境 抓取本地数据 抓取外部数据 利用hub 流量镜像span.rspan.erspan 界面介绍.首选项.抓包选项 界面介绍 菜单栏 帮助 ...
- Navicat连接数据库成功,新建查询时提示错误“Cannot create file ……”
Navicat连接数据库成功,新建查询时提示错误"Cannot create file --" 原因:编辑连接{高级}<设置位置>被修改,该oci.dll不正确 解决方 ...
- vm 将宿主机文件夹 映射至 虚拟机
一.关于centos如何安装(自行百度) 二.设置共享文件夹 添加共享文件夹(关闭虚拟机时操作) 虚拟机->设置->选项->共享文件夹 三.安装vm-tools (请用root用户执 ...
- Python中open和with open有什么区别?怎么用?
open 打开文件 file=open("文件名","读写模式") 操作文件 代码段 关闭文件 file.close() 注意事项:使用open方法,文件操作完 ...
- vulnhub靶机-Me and My Girlfriend: 1
vulnhub靶机实战 1.靶机地址:https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 2.先看描述(要求) 通过这个我们可以知道我们 ...
- C# 显示、隐藏窗口对应的任务栏
WPF中全屏窗口,会自动隐藏任务栏. 那非全屏窗口如何隐藏任务栏?甚至有没有一种场景,隐藏任务后自定义一套系统任务栏来显示? 以下会分阶段讲述一些概念 1. 主屏任务栏 任务栏,其实也是一个窗口,主屏 ...