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网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...
随机推荐
- mogoose 创建数据库并增删改查
下载 npm i mongoose -s 连接数据库 const mongoose = require("mongoose"); mongoose.connect(dbURL); ...
- 不关闭selinux下配置php+httpd访问KingbaseES
在不关闭selinux的情况下使httpd+php+KingbaseES正常使用1.正常设置php.apache 除了正常流程外还需要在/etc/sysconfig/httpd最后追加LD_LIBRA ...
- 分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起~~~
前言 在真实的项目中,不管是功能日志.错误日志还是异常日志,已经是项目的重要组成部分.在原始的单体架构,通常看日志的方式简单粗暴,直接登录到服务器,把日志文件拷贝下来进行分析:而如今分布式.微服务架构 ...
- C++ 多线程按顺序执行函数
我们提供了一个类: public class Foo { public void first() { print("first"); } public void second() ...
- C++学习笔记:08 多态性
课程<C++语言程序设计进阶>清华大学 郑莉老师) 基本概念 多态性 具体的讲,在面向对象程序设计中,指同样的方法被不同对象执行时会有不同的执行效果. 多态的实现 绑定机制 绑定是将一个标 ...
- Win10连WiFi显示无internet,安全 却可以正常上网
1.现象: win10连WiFi显示无internet,安全 可以正常上网 2.原因: Wind10升级系统补丁后,更新了系统检查是否联网的注册表配置,新的域名在国内存在无法连接情况.导致此问题发生 ...
- 微信小程序 开发 “婚礼邀请函”
成品展示: 5个页面 我们来讲解哈(上面地图位置随便定的点) 1.首页开发 一开始进来显示首页 然后默认开始播放背景音乐,这个背景音乐点击右上角图标可以暂停(有动画),然后点击新郎和新娘文字可以调到 ...
- 洛谷P7078 [CSP-S2020] 贪吃蛇 题解
比赛里能做出这题的人真的非常厉害,至少他的智商和蛇一样足够聪明. 首先有一个结论: 当前最强的蛇吃了最弱的蛇之后,如果没有变成最弱的蛇,他一定会选择吃! 证明: 假设当前最强的蛇叫石老板. 如果下一条 ...
- 后缀自动机(SAM)奶妈式教程
后缀自动机(SAM) 为了方便,我们做出如下约定: "后缀自动机" (Suffix Automaton) 在后文中简称为 SAM . 记 \(|S|\) 为字符串 \(S\) 的长 ...
- Python语法1
变量 命名规则 变量名必须是大小写英文字母.数字或下划线 _ 的组合,不能用数字开头,并且对大小写敏感 变量赋值 同一变量可以反复赋值,而且可以是不同类型的变量 i=2; i="name&q ...