IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++【实验3】 模板 -> 正文阅读

[C++知识库]C++【实验3】 模板

一、模板函数(compare)

1、一般模板函数

数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。函数模板的定义形式是:

template <模板参数表>
类型名 函数名 (参数表)
{
    函数体的定义
}

?所有函数模板的定义都用关键字 template 开始,其中<>中可以包括以下内容:

(1)class 或 typename 标识符,指明可以接受一个类型参数。

(2)类型说明符 标识符,指明可以接受一个由“类型说明符”所规定类型的常量作为参数。

(3)template<参数表>class 标识符,指明可以接收一个类模板名作为参数。

以下为一个判断相等的函数模板:?

template<class T>
bool Isequal(T& p1, T& p2){
	return p1 == p2;
}
 

2、特化模板函数

使用模板时会遇到一些特殊的类型需要特殊处理,不能直接使用当前的模板函数,所以此时我们就需要对该类型特化出一个模板函数。

比如上面那个判断相等的模板函数在对于字符串进行比较时就不能使用了,对于字符串我们不能直接比较,因此直接特化出一个专门供字符串使用的模板参数。

template<> // 此处不添加类型模板,直接使用空即可
bool Isequal<char*>(char*& p1, char*& p2){
	return strcmp(p1, p2) == 0;
}

?【注意】

  • 使用模板特化时,必须要先有基础的模板函数。(就是上面第一个模板函数)

  • 使用特换模板函数时格式有要求:

    1.template 后直接跟<> 里面不用写类型。
    2.函数名<特化类型>(特化类型 参数1, 特化类型 参数2 , …) 在函数名后跟<>其中写要特化的类型。

  • 特化的函数的函数名,参数列表要和原基础的模板函数想相同,避免不必要的错误。


二、模板类Queue或Stack


1、模板类(Queue,Stack)

使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、返回值或局部变量能取不同类型。(包括系统预定义的和用户自定义的)

类模板的定义形式是:

template <模板参数表>
class 类名
{
    类成员声明
}

1.1 Queue?

Queue<T> 是一种只能访问第一个和最后一个元素的容器适配器,只能在容器的末尾添加新元素,只能从头部移除元素。

1、特征:先进先出 。只能操作队头与队尾的元素 。

2、功能:queue.push(elem):把元素压入队列尾部?
????????????????queue.pop():删除队首元素,但不返回
????????????????queue.front():返回队首元素,但不删除
????????????????queue.back():返回队尾元素,但不删除
????????????????queue.size():返回队列中元素的个数
????????????????queue.empty():检查队列是否为空,如果为空返回true,否则返回false

使用front()和pop()函数前,必须用empty()判断队列是否为空。

1.2 Stack

Stack<T> 容器适配器中的数据是先进后出的,当想访问栈内某一元素时,必须将其顶部的元素都弹出出栈后,才能访问该元素。

1、特征:先进后出 。只能插入,删除,访问栈顶的元素。

2、功能:stack.push(elem):往栈头添加元素
????????????????stack.pop():从栈头移除第一个元素
????????????????stack.top():返回栈顶元素
????????????????stack.empty():判断堆栈是否为空,栈空返回true,栈非空返回false
????????????????stack.size():返回堆栈的大小


2、成员模板函数

类成员声明的方法与普通类的定义几乎相同,只是在它的各个成员(数据成员和函数成员)中通常要用到模板的类型T。

成员函数的定义形式是:

template <模板参数表>
类型名 类名 <模板参数标识符列表>::函数名(参数表)


3、模板特化:模板成员函数特化、模板类特化


三、模板类AutoPtr
构造函数
析构函数
拷贝构造函数
等号、->、*等运算符重载
主函数调用AutoPtr

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:34:54  更:2021-11-17 12:36:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:00:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码