C++模板(一)
来源:互联网 发布:java 图片base64 上传 编辑:程序博客网 时间:2024/06/05 20:18
模板的目的:为了实现代码的复用性。
我们可以理解“模板”其实就是一栋建造好但还未装修的楼,装修就是我们需要的类型(int, char, string, float, 自定义类型等),当楼房装修好就可以使用了,装修的过程就是我们说的实例化,这样理解模板会不会感觉好一点了。
- 模板函数
格式: template <class 形参名1, class 形参名2...> 函数返回类型 函数名(参数列表) {...} (注:class 可以换成 typename)eg: template <class T> T Add(const T& a , const T& b) { return a + b; }(为何不用引用返回?因为这里产生的是一个临时变量a+b的值(生存期是Add函数范围内),临时变量不能使用引用)(注:模板函数在没有实例化之前,编译器一般不会检查其的语法错误)
- 模板类
调用:类名<类型> 对象名类的类型:类名<类型>eg:template <class T> class A {...} mian()函数调用--- A<int> b;
- 适配器模式:一种模板的设计模式,主要针对下面两种情况来设计的:
队列—–先进先出 (链表)—–尾插头删 (队头出,队尾进)
栈——-后进先出 (顺序表)—-尾插尾删 (栈顶进出)
适配器的实现模式:template <class T , class Container>T:表示一种数据类型;Container:容器,是一种类,将该类设计成(看成)一种容器;
队列:
template<class T,class Container = List<T>>//Container是一个容器,是一个链表类class Queue{protected: Container _con;//_con是一个自定义的链表对象public: void Push(const T& data)//尾插 { _con.PushBack(data); } void Pop()//头删 { _con.PopFront(); } void Show() { _con.show(); } T& Back()//返回尾值 { return _con.back(); } T& Front()//返回头值 { return _con.front(); } size_t Size() { return _con.size(); } bool Empty() { return _con.isEmpty(); }};----main()调用int main(){ Queue<int,List<int>> dui; dui.Push(1); dui.Show(); dui.Push(2); dui.Show(); dui.Push(3); dui.Show(); dui.Push(4); dui.Show(); while(!dui.Empty()) { cout<<"出队列:"<<dui.Front()<<endl; dui.Pop(); dui.Show(); }}
栈:
template<class T,class Container = Sqlist<int>>//容器是一个顺序表class Stack{protected: Container _con;//_con是一个自定义的顺序表对象public: void Push(const T& data)//尾插 { _con.PushBack(data); } void Pop()//尾删 { _con.PopBack(); } bool Empty() { return _con.isEmpty(); } size_t Size() { return _con.size(); } T& Top()//返回栈顶的值 { return _con.Back(); } void show() { _con.show(); }};-----main调用int main(){ Stack<int,Sqlist<int>> sq; sq.Push(4); sq.show(); sq.Push(5); sq.show(); sq.Push(6); sq.show(); sq.Push(7); sq.show(); while(!sq.Empty())//判空 { cout<<"出栈:"<<sq.Top()<<endl; sq.Pop(); sq.show(); }}
(注:以上并没有将代码全部展出,只是通过展现部分代码以重点体现其主要的功能,具体代码可以查看我的其他博客,也可以自己实现相应的模板链表和模板顺序表)
0 0
- C++STL模板容器(一)
- linux c 编程模板总结(一)
- c++STL(一)重载与模板。
- C++STL模板笔记(一)
- 编写一函数add()函数重载,函数模板(C++)
- 关于C++STL模板库的一些总结(一)
- C++Primer---模板与泛型编程(一)
- 【C++】 C++标准模板库(一) Vector
- 模板(一)----->函数模板
- C++模板(一)
- C++模板(一)
- 类模板(一)
- C++模板(一)
- 模板(一)
- c++模板(一)
- 69 模板(一)
- 函数模板(一)
- C++模板(一)
- spark SQL学习(spark连接hive)
- R语言中apply函数使用
- 容斥——HDU 4407
- redis主从集群
- LeetCode-105、106 Construct Binary Tree (JAVA)重建二叉树
- C++模板(一)
- Merge Two Sorted Lists
- 欢迎使用CSDN-markdown编辑器
- 像@Transactional一样利用注解自定义aop切片
- hihoCoder编程练习1501
- spark SQL学习(spark连接 mysql)
- 【编程题目】Pq.9--反转链表
- java LinkedList源码阅读记录
- S5PV210 uboot中的链接脚本u-boot.lds