C++类模板之栈的简单操作
来源:互联网 发布:数据库联表的算法思想 编辑:程序博客网 时间:2024/06/10 15:55
C++中模板的使用是泛型编程的一种,当使用模板的时候,不必去考虑一个函数、一个类等对具体数据类型的处理,这样大大的减少的代码的数量,提高了程序的效率。当程序中需要使用到一个函数或者类是,编译器将根据模板生成一个能够处理特定数据的代码块。
模板与函数重载区别在于,当具体实现的功能或行为一样,只是处理的数据类型不同时,使用模板;当具体的功能、行为或函数体的基本一直,函数形参的个数、类型都不一致时,建议使用重载。
再此,感谢小甲鱼老师。www.fishc.com
该程序中,只是一个简单的demo,方便理解类模板与栈,没有做安全检查(进栈是栈溢出的检出,出栈时,栈是否为空等)
1、头文件,stack.h
#ifndef STACK_H_INCLUDED#define STACK_H_INCLUDED/*** Copyright (C) QPSOFT.COM All rights reserved.*/template <class T>class Stack{public: Stack(unsigned int size=100);//栈大小 ~Stack(); void push(T val);//进栈 T pop();//出栈private: unsigned int size; unsigned int sp;//指向栈中一个位置的指针 T *data;//开辟一个新空间,将首地址给T 类型的指针data};#endif // STACK_H_INCLUDED
2、源文件,stack.cpp
#include "stack.h"//利用构造函数初始化template <class T>Stack<T>::Stack(unsigned int size)//Stack<T>::Stack(unsigned int size)中<T>不可少,不然编译器没有办法和普通类做区别{ this->size=size;//因为形参与实参同名size,用this->size表明为类数据成员 data=new T[size]; sp=0;}//析构函数template <class T>Stack<T>::~Stack(){ delete []data;}//进栈,每进一个元素,sp加1,指向下一个元素地址template <class T>void Stack<T>::push(T val){ data[sp++]=val;}//出栈,必须sp先减一个才能指向最后一个进栈的元素。//因为,进栈的时候,每进一个元素,sp加1,指向下一个元素地址//当进最后一个元素时,sp加一指向了下一个元素地址template <class T>T Stack<T>::pop(){ return data[--sp];}3、主函数main.cpp
#include<iostream>#include<string>#include "stack.cpp"using namespace std;int main(){ Stack<int> intstack(100); intstack.push(1); intstack.push(2); intstack.push(3); cout<<intstack.pop()<<endl; cout<<intstack.pop()<<endl; cout<<intstack.pop()<<endl; Stack<string> stringstack(100); stringstack.push("i love you"); stringstack.push("i like you"); stringstack.push("i miss you"); cout<<stringstack.pop()<<endl; cout<<stringstack.pop()<<endl; cout<<stringstack.pop()<<endl; return 0;}//显示结果,先进后出/*321i miss youi like youi love you*/
0 0
- C++类模板之栈的简单操作
- C++:简单的二维数组模板类
- C++--简单类模板语法
- C语言 简单的栈操作
- C语言之简单的位操作面试题
- 简单封装FMDB操作sqlite的模板
- 【c++】模拟实现栈 类模板(Stack的基本操作)
- 【c++】函数模板的简单应用
- C简单的配置文件操作
- [C/C++]简单的C++日志操作类
- vector模板类之简单程序代码(初始化、迭代器、大小、容量以及删除等操作)
- [C++] 模板类实现简单链表
- 学习C++模板---模板类带简单参数
- C++学习日志之运用类模板编写栈操作的实例
- 0003、node 之模板引擎的操作
- c++模板重载之字符串模板库的简单实现
- 用汇编的眼光看C++(之模板类)
- 用汇编的眼光看C++(之模板类)
- MongDB的用户认证管理
- 运维管理的常用16个Linux命令(一)
- Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄
- [LeetCode]Happy Number
- GetSystemMetrics
- C++类模板之栈的简单操作
- openlayers修改弹窗popup背景图片
- Redis 对tomcat集群--session的管理
- Android获取屏幕高度、标题高度、状态栏高度详解
- 深入理解javascript原型和闭包——this
- [Unity基础]json在unity中的使用
- android静默安装
- PPPoE configuration
- Step into MongoDB - 08 - 聚合查询