一: 实现一个简单的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 实现一个简单的"栈"的更多相关文章

  1. Objective-C实现一个简单的栈

    栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出 ...

  2. 一个简单地template模板

    之前的项目中用到了artTemplate模板,感觉挺有意思,于是查看相关资料,自己动手写了个简单地template模板插件.虽然会有一些不足,但也是自己的一番心血.主体代码如下 /* * 一个简单地t ...

  3. 【WPF】学习笔记(一)——做一个简单的电子签名板

    参加实习(WPF)已经有两个多周的时间了,踩了一些坑,也算积累了一些小东西,准备慢慢拿出来分享一下.(●'◡'●) 这次呢就讲讲一个简单的电子签名板的实现. 先上张图(PS:字写得比较丑,不要太在意哈 ...

  4. 一个简单的PHP模板引擎

    PHP早期开发中通常是PHP代码和HTML代码混写,这也使代码中充斥着数据库操作,逻辑处理等.当项目不大时,这样的代码还可以接受,但是随着项目不断扩大,我们就会发现同一个文件中同时存在前端逻辑和后端处 ...

  5. 【UI插件】开发一个简单日历插件(上)

    前言 最近开始整理我们的单页应用框架了,虽然可能比不上MVVM模式的开发效率,也可能没有Backbone框架模块清晰,但是好歹也是自己开发出来 而且也用于了这么多频道的东西,如果没有总结,没有整理,没 ...

  6. 如何创建一个简单的C++同步锁框架(译)

    翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...

  7. Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序

    题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的.比如输入的push 序列是1. ...

  8. Quartz2D之绘制一个简单的机器猫

    学习iOS有一段时间了,在博客园也默默的潜水了两个月,见识了很多大神,收获不少. 今天整理笔记,发现忘记的不少,我感觉需要及时的整理一下了,同时也把做的小东西贴上来和大家分享一下. 最近学习了Quar ...

  9. 一个简单算法题引发的思考<DNA sorting>(about cin/template/new etc)

    首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...

随机推荐

  1. Jvm调优理论篇

    Jvm实战调优 OOM(Out Of Memory) 内存溢出错误 ps:由于Java虚拟机有许多实现,本文主要阐述的是OpenJDK的HotSpot虚拟机,JDK版本是8. 一.首先要明白造成OOM ...

  2. Dockers(29)- 网络连通

    网络连通 背景 基于docker0建了两个容器tomcat01和tomcat02,网段位于172.12.0.0/16 我们又新建了一个网络,网段为192.168.0.0/16,基于此网段新建了两个容器 ...

  3. Jmeter系列(36)- Access Log Sampler

    简介 Access Log Sampler 是个非常有用的工具,可以收集和分析真实用户操作的数据,并可用于流量分析.常见的就是我们的nginx的access.log 日志 使用 access.log ...

  4. 重启ubuntu系统VMware tools失效处理方法

    1) sudo apt-get autoremove open-vm-tools 2) Install VMware Tools by following the usual method (Virt ...

  5. springboot pom.xml

    Demo project for Spring Boot <?xml version="1.0" encoding="UTF-8"?> <pr ...

  6. ELK实战部署

    环境 : 一台 centos 6.7 IP地址: 192.168.88.250 软件版本 : ElasticSearch 2.1.0    Logstash 2.1.1  Kibana 4.3.1   ...

  7. 使用Jmeter做接口测试(学生信息的6个接口)

    使用Jmeter做接口测试,案例中涉及到接口有:获取学生信息.登录.添加学生信息.学生金币充值.获取所有学生信息.文件上传. 一.获取学生信息(get请求) 服务器名称或IP:输入被请求服务器的名称或 ...

  8. webpack工具学习 构建简单vue项目(不依赖vue-cli) webpack4.0

    目的用webpack构建简单前端项目 1.npm init   (npm init -y)  形成package.json 2.npm install --save-dev webpack  形成 n ...

  9. Orchard Core 配置项说明

    Orchard Core使用IShellConfiguration扩展了ASP.NET Core IConfiguration,以允许在应用程序范围的配置之上进行特定于租户的配置.虽然本文档使用Orc ...

  10. P5956-[POI2017]Podzielno【数学】

    正题 题目链接:https://www.luogu.com.cn/problem/P5956 题目大意 \(B\)进制下,给出序列\(a\),\(a_i\)表示数字\(i\)有多少个.求一个最大的\( ...