c++入门----模板深入探究与仿函数

1.模板参数加入一个变量

一般只能是int,double要看c++的版本,在最新的版本下是支持double模板参数的。

2.适配器的使用

template <class T,class container=deque<T>>
class stack {
public:void push_back(const T& x) {_con.push_back(x);}void pop() {_con.pop_back();}size_t size() {return _con.size();}bool empty() {return _con.empty();}const T& top() {return _con.back();}
private:container _con;
};

上面的代码是用双端队列deque这个适配器构造一个栈。(这是一种车有轮胎的复用常用的复用关系,与c++中继承对应的植物中的番茄那种复用是不同的)所谓适配器,实际上就是把之前搞定的东西通过转化后直接用来创建新东西。

3.固定指针和引用的模板

template <class T1&,class T2*>

通过这种方式进行固定指针和引用类型参数。

4.特化与偏特化

4.1原函数模板:

template <class Type>
Type Max(const Type& a, const Type& b)
{cout << "This is Max<Type>" << endl;return a > b ? a : b;
}
template <class Type1,class Type2>
Type1 a(Type1 aa1, Type2 aa2) {return aa1 + aa2;
}

4.2特化:

template<>
int Max<int>(const int& a, const int& b)
{cout << "This is Max<int>" << endl;return a > b ? a : b;
}

通过这个代码可以对函数模板中int类型的函数模板进行(特化)也就是规定int型的函数会生成这个。

4.3偏特化:

template <class Type1>
Type1 a<Type1,int>(Type1 aa1, int aa2) {return aa1 + aa2;
}

偏特化限制了部分的位置,偏特化进行实例化的优先级是大于全部都是模板参数的。
 

5.仿函数

简单介绍一下仿函数,实际上就是创建一个类,然后用类的一些方法做到类似函数的效果。例如下面这个代码:

template<class T>
class less{
public:bool operator() (const T& x, const T& y) {return x > y;}
};
int main() {less<int> ls;bool rt = ls(3, 4);
}

为什么要使用仿函数?当在要进行建大堆和建小堆的情况下,每次都需要改里面的大于和小于号?那不是很麻烦吗?但是如果在模板中加入一个仿函数对象,就能直接进行处理!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)

文章目录 S09L40 Exercise 11 - Vim Settings and the Vimrc File1 训练目标2 操作指令2.1. 打开 vimrc-sample 文件2.2. 尝试各种选项与设置2.3. 将更改内容保存到 vimrc-sample 文件2.4. 将文件 vimrc-sample 的内容复制到寄存器2.5. 创建专属 vimrc 文件2.6. 对于 Mac、Linu…

kafka学习笔记5 PLAIN认证——筑梦之路

在Kafka中&#xff0c;SASL&#xff08;Simple Authentication and Security Layer&#xff09;机制包括三种常见的身份验证方式&#xff1a; SASL/PLAIN认证&#xff1a;含义是简单身份验证和授权层应用程序接口&#xff0c;PLAIN认证是其中一种最简单的用户名、密码认证方式&…

深入解析 Spring 框架中的事务传播行为

目录 &#xff08;一&#xff09;REQUIRED &#xff08;二&#xff09;SUPPORTS &#xff08;三&#xff09;MANDATORY &#xff08;四&#xff09;REQUIRES_NEW &#xff08;五&#xff09;NOT_SUPPORTED &#xff08;六&#xff09;NEVER &#xff08;七&#xff09;NE…

60,【1】BUUCF web [RCTF2015]EasySQL1

先查看源码 1&#xff0c;changepwd&#xff08;修改密码&#xff09; <?php // 开启会话&#xff0c;以便使用会话变量 session_start();// 设置页面的内容类型为 HTML 并使用 UTF-8 编码 header("Content-Type: text/html; charsetUTF-8");// 引入配置文件&…

高并发内存池_CentralCache(中心缓存)和PageCache(页缓存)申请内存的设计

三、CentralCache&#xff08;中心缓存&#xff09;_内存设计 &#xff08;一&#xff09;Span的创建 // 页编号类型&#xff0c;32位下是4byte类型&#xff0c;64位下是8byte类型 // #ifdef _WIN64 typedef unsigned long long PageID; #else _WIN32 typedef size_t PageI…

SimpleHelp远程管理软件存在任意文件读取漏洞(CVE-2024-57727)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…

2024年终总结-行到水穷处,坐看云起时

依然是——关于我 我&#xff0c;坐标山东青岛&#xff0c;一位无名的Java Coder&#xff0c;你可以叫我Debug.c亦或者种棵代码技术树。在此不过多赘述关于我&#xff0c;更多的关于我请移步我的2023年年终总结。 2023年终总结-轻舟已过万重山 2024年OKR完成情况 2023年年末…

AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码

AI编程工具使用技巧&#xff1a;在Visual Studio Code中高效利用阿里云通义灵码 前言一、通义灵码介绍1.1 通义灵码简介1.2 主要功能1.3 版本选择1.4 支持环境 二、Visual Studio Code介绍1.1 VS Code简介1.2 主要特点 三、安装VsCode3.1下载VsCode3.2.安装VsCode3.3 打开VsCod…

代码随想录day14

二叉树的反转&#xff0c;采用迭代&#xff0c;只能用前序和后序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(i…

1月21日星期二今日早报简报微语报早读

1月21日星期二&#xff0c;农历腊月廿二&#xff0c;早报#微语早读。 1、多地官宣&#xff1a;2025年可有序、限时或在限定区域燃放烟花爆竹&#xff1b; 2、TikTok恢复在美服务&#xff1b;特朗普提出继续运营TikTok方案&#xff0c;外交部&#xff1a;若涉及收购中国企业应…

计算机组成原理——数据表示(一)

生活是一道长长的旅程&#xff0c;充满了挑战和困难。然而&#xff0c;我们必须坚持下去&#xff0c;努力前进。无论遇到什么困难&#xff0c;我们都要勇敢面对&#xff0c;永不放弃。只有通过不断的努力和坚持&#xff0c;我们才能够取得成功。在这个旅程中&#xff0c;我们可…

【数据结构】双向循环链表实现简易图书管理系统的增删改查

图书管理系统 使用双向循环链表实现一个简单的图书管理系统&#xff0c;图书管理系统有如下功能&#xff1a; 1.添加书籍 2.删除书籍 3.修改书籍信息 4.查询书籍信息 5.借书 6.还书 #include <stdio.h> #include <stdlib.h> #include <string.h>// 书籍结构体…

强化学习入门--基本概念

强化学习基本概念 grid-world example 这个指的是一个小机器人&#xff08;agent&#xff09;在一个网格区域&#xff08;存在边界&#xff09;&#xff0c;网格中存在需要躲避的格子和目标格子&#xff0c;我们的目的就是找到到达目标格子的最短路径 state 表示智能体相对…

STMCubeMX配置STM32F103ZET6

1 配置时钟 配置RCC。 配置 SYS。将Timebase Source配置为TIM1, SysTick留给FreeRTOS用。 注意: 由于第一次配置的时候忘记配置这个步骤,导致工程第一次烧录成功后,后面一直无法烧录,报以下错误: keil no target connect Error: Flash Download failed - Target DLL h…

OFD 套版生成原理与 C# 实现详解

1. 引言 OFD&#xff08;Open Fixed-layout Document&#xff09;是一种基于 XML 的开放版式文档格式&#xff0c;主要用于电子文档的存储和交换。与 PDF 类似&#xff0c;OFD 是一种固定版式文档格式&#xff0c;能够确保文档在不同设备和平台上显示的一致性。OFD 格式广泛应…

Leetcode:2239

1&#xff0c;题目 2&#xff0c;思路 循环遍历满足条件就记录&#xff0c;最后返回结果值 3&#xff0c;代码 public class Leetcode2239 {public static void main(String[] args) {System.out.println(new Solution2239().findClosestNumber(new int[]{-4, -2, 1, 4, 8})…

C语言之斗地主游戏

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 ​ C语言之斗地主游戏 目录 程序概述程序设计 Card类CardGroup类Player类LastCards类Land…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)图像变换

形态变换 图像处理中的形态学操作是处理图像结构的有效方法。以下是一些常见的形态学操作的介绍及其在 OpenCV 中的实现示例。 1. 腐蚀&#xff08;Erosion&#xff09; 腐蚀操作通过消除图像边界来减少图像中的白色区域&#xff08;前景&#xff09;&#xff0c;使物体的边…

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

SiamCAR(2019CVPR):用于视觉跟踪的Siamese全卷积分类和回归网络

原文标题:SiamCAR: Siamese Fully Convolutional Classification and Regression for Visual Tracking 中文标题:SiamCAR:用于视觉跟踪的Siamese全卷积分类和回归 代码地址: https://github.com/ohhhyeahhh/SiamCAR Abstract 通过将视觉跟踪任务分解为两个子问题,…