当前位置: 首页 > news >正文

【C++提高篇】—— C++泛型编程之模板基本语法和使用的详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、模板的概念
  • 二、函数模板
    • 2.1 函数模板的使用
    • 2.2 函数模板注意事项
    • 2.3 普通函数与函数模板的区别
    • 2.4 普通函数与函数模板的调用规则
    • 2.5 模板的局限性
  • 三、类模板
    • 3.1 类模板的使用
    • 3.2 类模板与函数模板的区别
    • 3.3 类模板中成员函数的的创建时机
    • 3.4 类模板对象做函数参数
    • 3.5 类模板与继承
    • 3.6 类模板成员函数类外实现
    • 3.7 类模板分文件编写
    • 3.8 类模板与友元


前言

C++中的另一种编程思想称为泛型编程,主要利用模板和标准模板库(STL)。泛型编程通过编写与数据类型无关的代码,提高了代码的复用性和灵活性。STL提供了一套丰富的容器、算法和迭代器,使开发者可以高效地处理各种数据结构和算法。本章节将系统介绍泛型编程的概念、模板的使用方法以及STL的基本组件。

一、模板的概念

模板:模板就是建立通用的模具,大大提高复用性
模板的特点
a. 模板不可以直接使用,它只是一个框架
b. 模板的通用并不是万能的

二、函数模板

2.1 函数模板的使用

语法
template< typename T>
函数声明或定义
解释
template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用class代替
T — 通用的数据类型,名称可以替换,通常为大写字母

示例
传统的实现:对于不同的数据类型的交换函数,要分开每个都要写一遍实现:

//交换整型函数
void swapInt(int &a, int &b){int temp = a;a = b;b = emp;
}
//交换浮点型函数
void swapDouble(double &a, double &b){double temp = a;a = b;b = temp;
}

使用函数模板:对于操作一样的函数,写一次实现即可

template<typename T>
void mySwap(T &a,T &b) {    //传入引用:交换实参T temp = a;a = b;b = temp;
}
//使用
int main()
{int a = 10;  int b = 20;mySwap(a,b);   //利用模板实现交换//1、自动类型推导// mySwap<int>(a,b);  //2、显示指定类型cout<< "a=" << a << "b=" << b <<endl;system("pause");return 0;
}

总结
函数模板定义后,有两种使用方式:
a. 自动类型推导

mySwap(a,b);

b. 显示指定类型

mySwap<int>(a,b);
mySwap<double >(a,b);

2.2 函数模板注意事项

(1) 注意事项一:使用自动类型推导调用的方法
自动类型推导,必须推导出一致的数据类型T, 才可以使用
示例

int main()
{int a = 10;int b = 20;char c = 'c';mySwap(a,b);   //正确,可以推导出一致的T//mySwap(a,c);//错误,a和c数据类型不同,推导不出一致的T类型cout<< "a=" << a << "b=" << b <<endl;system("pause");return 0;
}

(2) 注意事项二
使用模板时必须要确定出T的数据类型,才可以使用
示例

template<classT>
void func(){
cout<< "func调用" <<endl;
}
int main()
{//func();//错误,模板不能独立使用,必须确定出T的类型func<int>();//利用显示指定类型的方式,给T一个类型,才可以使用该模板}system("pause");return 0;
}

2.3 普通函数与函数模板的区别

区别
a. 普通函数调用时可以发生自动类型转换(隐式类型转换)
b. 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
c. 如果利用显示指定类型的方式,可以发生隐式类型转换
示例

void myPrint(int a,int b){cout<< "调用的普通函数a + b:" << a + b <<endl;
}
template<typename T>
void myPrint(T a, T b){cout<< "调用的模板a + b:" << a + b <endl;
}
void test01(){int a = 10;int b = 20;char c = 'c';//myPrint(a,c); //报错,使用自动类型推导时,不会发生隐式类型转换myPrint<int>(a,c);//正确,如果用显示指定类型,可以发生隐式类型转换
}
int main()
{test01();system("pause");return 0;
}

总结
建议使用显示指定类型的方式,调用函数模板,因为可以自己确定通用类型T

2.4 普通函数与函数模板的调用规则

调用规则如下
1. 如果函数模板和普通函数都可以实现,优先调用普通函数
2. 可以通过空模板参数列表来强制调用函数模板
3. 函数模板也可以发生重载
4. 如果函数模板可以产生更好的匹配,优先调用函数模板
意思就是,例如:当传入的参数为char类型,普通函数形参定义的是int,那么“编译器会觉得隐式转换麻烦“,优先去使用模板函数的实现

示例

void myPrint(int a,int b){cout<< "调用的普通函数" <<endl;
}
template<typename T>
void myPrint(T a, T b){cout<< "调用的模板" <<endl;
}
template<typename T>
void myPrint(Ta, Tb, Tc){     //重载的函数模板cout<< "调用重载的模板" <<endl;
}
void test01(){int a = 10;int b = 20;myPrint(a,b);//优先调用普通函数的实现myPrint<>(a, b);//可以通过空模板参数列表来强制调用函数模板int c = 30;myPrint(a, b, c);//调用重载的函数模板char c2 = 'b';myPrint(c1, c2);//如果函数模板可以产生更好的匹配,优先调用函数模板charc1='a';
}
int main()
{test01();system("pause");return 0;
}

2.5 模板的局限性

局限性:模板的通用性并不是万能的
例如

template<classT>
void func(T a,T b){a=b;}

在上述代码中提供的赋值操作,如果传入的a和b是一个数组,就无法实现了

template<classT>
void func(T a,T b){if(a>b){...}
}

在上述代码中,如果T的数据类型传入的是像Person这样的自定义数据类型,也无法正常运行
解决
C++为了解决这种问题,提供模板的重载,可以为这些特定的类型提供具体化的模板(说白了就是不同的类型,不同的处理,感觉和写普通函数实现差不多了)

三、类模板

3.1 类模板的使用

语法
template< typename T>

template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用class代替
T — 通用的数据类型,名称可以替换,通常为大写字母

示例

//类模板
template<class T1, class T2>
class Person{
public:Person(NameTypename,AgeTypeage){this->m_Name = name;this->m_Age = age;}void showPerson(){cout<< "name:" << this->m_Name << "age:" << this->m_Age <<endl;}
public:T1 m_Name;T2 m_Age;
};
void test01(){//类模板没有自动类型推导的使用方式,要指定NameType为string类型,AgeType为int类型Person<string,int>P1("孙悟空",999);P1.showPerson();
}
int main()
{test01();system("pause");return 0;
}

注意类模板没有自动类型推导的使用方式,要指定类型

3.2 类模板与函数模板的区别

区别
a. 类模板没有自动类型推导的使用方式,只能用显示指定类型方式
b. 类模板在模板参数列表中可以有默认参数
示例

//有默认参数的类模板
template<class T1,class T2=int>
class Person{
public:Person(T1 name,T2 age){this->mName = name;this->mAge = age;}void showPerson(){cout<< "name:" << this->mName << "age:" << this->mAge <<endl;}
public:T1 mName;T2 mAge;
};
//使用
int main()
{Person<string>p("猪八戒",999);//类模板中的模板参数列表可以指定默认参数//Person<string,int>p("孙悟空",1000);//必须使用显示指定类型的方式,使用类模板p.showPerson();system("pause");return 0;
}

3.3 类模板中成员函数的的创建时机

类模板中成员函数和普通类中成员函数创建时机的区别:
a. 普通类中的成员函数一开始就可以创建
b. 类模板中的成员函数在调用时才创建

示例

总结:类模板中的成员函数并不是一开始就创建的,在调用时才去创建

3.4 类模板对象做函数参数

使用:类模板实例化出的对象,向函数传参的方式
一共有三种传入方式
a. 指定传入的类型 — 直接显示对象的数据类型
b. 参数模板化 — 将对象中的参数变为模板进行传递
c. 整个类模板化 — 将这个对象类型模板化进行传递

示例

总结
1.通过类模板创建的对象,可以有三种方式向函数中进行传参
2.使用比较广泛是第一种:指定传入的类型

3.5 类模板与继承

当类模板碰到继承时,需要注意一下几点
a. 当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型
b. 如果不指定,编译器无法给子类分配内存
c. 如果想灵活指定出父类中T的类型,子类也需变为类模板

示例

总结:如果父类是类模板,子类需要指定出父类中T的数据类型

3.6 类模板成员函数类外实现

学习目标:能够掌握类模板中的成员函数类外实现
示例

总结:类模板中成员函数类外实现时,需要加上模板参数列表

3.7 类模板分文件编写

问题
类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到
解决
解决方式1:直接包含.cpp源文件
解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制

示例

总结:主流的解决方式是第二种,将类模板成员函数写到一起,并将后缀名改为.hpp

3.8 类模板与友元

类模板配合友元函数的类内和类外实现
a. 全局函数类内实现 - 直接在类内声明友元即可
b. 全局函数类外实现 - 需要提前让编译器知道全局函数的存在
示例

总结:建议全局函数做类内实现,用法简单,而且编译器可以直接识别

相关文章:

【C++提高篇】—— C++泛型编程之模板基本语法和使用的详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、模板的概念二、函数模板2.1 函数模板的使用2.2 函数模板注意事项2.3 普通函数与函数模板的区别2.4 普通函数与函数模板的调用规则2.5 模板的局限性 三、类模…...

WPS计算机二级•高效操作技巧

听说这里是目录哦 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9;横排转竖排&#x1f350;批量删除表格空白行&#x1f348;方法一方法二建辅助列找空值 能量站&#x1f61a; 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9; 选中单元格&#xff0c;单击右键➡️“设…...

【Maui】视图界面与数据模型绑定

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&…...

vue3-sfc-loader 加载远程.vue文件(sfc)案例

注意事项 style标签如果增加了lang比如&#xff1a;lang“scss”&#xff0c;需要提供scss-loader的处理器&#xff0c;这个暂时没研究&#xff0c;我的处理方式是将动态模版的css放在了全局打包暂时还没有测试&#xff0c;后面测试了会同步更新 安装vue3-sfc-loader npm inst…...

Hadoop美食推荐系统 爬虫1.8w+数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离

Hadoop美食推荐系统 爬虫1.8w数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离 【Hadoop项目】 1. data.csv上传到hadoop集群环境 2. data.csv数据清洗 3.MapReducer数据汇总处理, 将Reducer的结果数据保存到本地Mysql数据库中 4. SpringbootEchartsMySQL 显…...

使用Linux驱动程序的fasync(文件异步通知机制)向用户空间发送SIGIO信号的学习记录

前言 本文学习使用Linux驱动程序的fasync(文件异步通知机制)向用户空间发送SIGIO信号。 fasync(文件异步通知机制)名字的来历 fasync 是 “file asynchronous” 的缩写&#xff0c;意思是 文件异步通知。 这里的文件是指文件结构体struct file *file &#xff0c;关于文件结…...

面试经验分享-回忆版某小公司

说说你项目中数据仓库是怎么分层的&#xff0c;为什么要分层&#xff1f; 首先是ODS层&#xff0c;连接数据源和数据仓库&#xff0c;数据会进行简单的ETL操作&#xff0c;数据来源通常是业务数据库&#xff0c;用户日志文件或者来自消息队列的数据等 中间是核心的数据仓库层&a…...

【算法学习笔记】35:扩展欧几里得算法求解线性同余方程

线性同余方程问题 线程同余方程问题是指 a x ≡ b ( m o d m ) ax \equiv b~(mod~m) ax≡b (mod m)&#xff0c;给定 a a a、 b b b和 m m m&#xff0c;找到一个整数 x x x使得该方程成立&#xff0c;即使得 a x m o d m b ax~mod~mb ax mod mb&#xff0c;随便返回任何一个…...

ent.SetDatabaseDefaults()

在 AutoCAD 的 .NET API 中&#xff0c;ent.SetDatabaseDefaults() 这句代码通常用于将一个实体&#xff08;Entity&#xff09;对象的属性设置为与其所在的数据库&#xff08;Database&#xff09;的默认设置相匹配。这意味着&#xff0c;该实体将采用数据库级别的默认颜色、图…...

使用docker部署tomcat服务器和mysql数据库

使用docker部署tomcat服务器 1、拉去tomcat镜像 [rootlocalhost yum.repos.d]# sudo docker pull docker.io/tomcat:9 9: Pulling from library/tomcat de44b265507a: Pull complete 4c2afd91a87d: Pull complete 89e9bbcfa697: Pull complete 11be3e613582: Pull complet…...

Jenkins 启动

废话 这一阵子感觉空虚&#xff0c;心里空捞捞的&#xff0c;总想找点事情做&#xff0c;即使这是一件微小的事情&#xff0c;空余时间除了骑车、打球&#xff0c;偶尔朋友聚会 … 还能干什么呢&#xff1f; 当独自一人时&#xff0c;究竟可以做点什么&#xff0c;填补这空虚…...

Elasticsearch(ES)基础查询语法的使用

1. Match Query (全文检索查询) 用于执行全文检索&#xff0c;适合搜索文本字段。 { “query”: { “match”: { “field”: “value” } } } match_phrase&#xff1a;精确匹配短语&#xff0c;适合用于短语搜索。 { “query”: { “match_phrase”: { “field”: “text” }…...

SpringCloud系列教程:微服务的未来(十四)网关登录校验、自定义过滤器GlobalFilter、GatawayFilter

前言 在微服务架构中&#xff0c;API 网关扮演着至关重要的角色&#xff0c;负责路由请求、执行安全验证、流量控制等任务。Spring Cloud Gateway 作为一个强大的网关解决方案&#xff0c;提供了灵活的方式来实现这些功能。 本篇博客将重点介绍如何在 Spring Cloud Gateway 中…...

Android Studio:Linux环境下安装与配置

更多内容&#xff1a;XiaoJ的知识星球 Android Studio&#xff1a;Linux环境下安装与配置 1.安装JDK2.安装Android Studio2.1 获取安装包2.2 安装&#xff08;1&#xff09;配置环境变量&#xff1a;&#xff08;2&#xff09;运行安装&#xff1a;&#xff08;3&#xff09;配…...

使用AI生成金融时间序列数据:解决股市场的数据稀缺问题并提升信噪比

“GENERATIVE MODELS FOR FINANCIAL TIME SERIES DATA: ENHANCING SIGNAL-TO-NOISE RATIO AND ADDRESSING DATA SCARCITY IN A-SHARE MARKET” 论文地址&#xff1a;https://arxiv.org/pdf/2501.00063 摘要 金融领域面临的数据稀缺与低信噪比问题&#xff0c;限制了深度学习在…...

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;product.kylinos.cn 开发者专区&#xff1a;developer.kylinos.cn 文档中心&#xff1a;document.kylinos.cn 交流论坛&#xff1a;forum.kylinos.cn 服务器环境以及配置 【内核版本…...

如何将数据库字符集改为中文,让今后所有的数据库都支持中文

最后一行有我自己的my.ini文件 数据库输入中文数据时会变为乱码&#xff0c; 这个时候&#xff0c;我们为每个数据库设置字符集&#xff0c;太过于麻烦&#xff0c;为数据库单独设置重启后又会消失 Set character_set_database’utf8’; Set character_set_server’utf8’; …...

Linux-C/C++--深入探究文件 I/O (下)(文件共享、原子操作与竞争冒险、系统调用、截断文件)

经过上一章内容的学习&#xff0c;了解了 Linux 下空洞文件的概念&#xff1b;open 函数的 O_APPEND 和 O_TRUNC 标志&#xff1b;多次打开同一文件&#xff1b;复制文件描述符&#xff1b;等内容 本章将会接着探究文件IO&#xff0c;讨论如下主题内容。  文件共享介绍&…...

Linux Bash 中使用重定向运算符的 5 种方法

注&#xff1a;机翻&#xff0c;未校。 Five ways to use redirect operators in Bash Posted: January 22, 2021 | by Damon Garn Redirect operators are a basic but essential part of working at the Bash command line. See how to safely redirect input and output t…...

opengrok_windows_环境搭建

目录 软件列表 软件安装 工程索引 ​编辑 工程部署 问题列表 软件列表 软件名下载地址用途JDKhttps://download.java.net/openjdk/jdk16/ri/openjdk-1636_windows-x64_bin.zipindex 使用java工具tomcathttps://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tom…...

【无法下载github文件】虚拟机下ubuntu无法拉取github文件

修改hosts来进行解决。 步骤一&#xff1a;打开hosts文件 sudo vim /etc/hosts步骤二&#xff1a;查询 github.com的ip地址 https://sites.ipaddress.com/github.com/#ipinfo将github.com的ip地址添加到hosts文件末尾&#xff0c;如下所示。 140.82.114.3 github.com步骤三…...

python——句柄

一、概念 句柄指的是操作系统为了标识和访问对象而提供的一个标识符&#xff0c;在操作系统中&#xff0c;每个对象都有一个唯一的句柄&#xff0c;通过句柄可以访问对象的属性和方法。例如文件、进程、窗口等都有句柄。在编程中&#xff0c;可以通过句柄来操作这些对象&#x…...

.Net Core微服务入门系列(一)——项目搭建

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…...

Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…...

[苍穹外卖] 1-项目介绍及环境搭建

项目介绍 定位&#xff1a;专门为餐饮企业&#xff08;餐厅、饭店&#xff09;定制的一款软件产品 功能架构&#xff1a; 管理端 - 外卖商家使用 用户端 - 点餐用户使用 技术栈&#xff1a; 开发环境的搭建 整体结构&#xff1a; 前端环境 前端工程基于 nginx 运行 - Ngi…...

【PCIe 总线及设备入门学习专栏 2 -- PCIe 的 LTSSM 和 Enumeration】

文章目录 OverviewLTSSM StatesDetect StatesDETECT_QUIETDETECT_ACTDETECT_WAITPolling StatesPOLL_ACTIVEPOLL_CONFIGPOLL_COMPLIANCEConfiguration StatesCONFIG_LINKWD_STARTCONFIG_LINKWD_ACCEPTCONFIG_LANENUM_WAITCONFIG_LANENUM_ACCEPTCONFIG_COMPLETECONFIG_IDLERecov…...

Redis 性能优化:多维度技术解析与实战策略

文章目录 1 基准性能2 使用 slowlog 优化耗时命令3 big key 优化4 使用 lazy free 特性5 缩短键值对的存储长度6 设置键值的过期时间7 禁用耗时长的查询命令8 使用 Pipeline 批量操作数据9 避免大量数据同时失效10 客户端使用优化11 限制 Redis 内存大小12 使用物理机而非虚拟机…...

QT开发技术 【基于TinyXml2的对类进行序列化和反序列化】一

一、对TinyXml2 进行封装 使用宏 实现序列化和反序列化 思路&#xff1a; 利用宏增加一个类函数&#xff0c;使用序列化器调用函数进行序列化 封装宏示例 #define XML_SERIALIZER_BEGIN(ClassName) \ public: \virtual void ToXml(XMLElement* parentElem, bool bSerialize …...

麦田物语学习笔记:创建TransitionManager控制人物场景切换

基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…...

2025年最新汽车零部件企业销售项目管理解决方案

在汽车零部件企业&#xff0c;销售项目管理的不规范和销售预测的不准确性常导致生产计划无法及时调整&#xff0c;因此客户关系常常中断&#xff0c;导致企业业务机会的丧失。为解决该问题&#xff0c;企业需要投入更多资源以优化销售流程与销售预测。 1、360多维立体客户视图…...

创建基于Prism框架的WPF应用(NET Framework)项目

创建基于Prism框架的WPF应用&#xff08;NET Framework&#xff09;项目 1、创建WPF&#xff08;NET Framework&#xff09;项目并整理结构 &#xff08;1&#xff09;、创建WPF&#xff08;NET Framework&#xff09;项目&#xff1b; &#xff08;2&#xff09;、添加Views和…...

AIGC视频生成模型:Meta的Emu Video模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Meta的视频生成模型Emu Video&#xff0c;作为Meta发布的第二款视频生成模型&#xff0c;在视频生成领域发挥关键作用。 &#x1f33a;优质专栏回顾&am…...

【PowerQuery专栏】PowerQuery提取XML数据

XML数据和Json 数据类型都是比较典型的层次数据类型,XML的数据格式非常的对称。所有的数据均是由标签对组成,图为典型的XML文件类型的数据。 在PowerQuery中进行XML数据类型解析采用的是Xml.Document 函数来进行文件内容的解析,Xml.Document 目前有三个可用参数。 参数1为数…...

流行的开源高性能数据同步工具 - Apache SeaTunnel 整体架构运行原理

概述 背景 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长&#xff0c;企业需要具备强大的数据集成能力来高效地处理和分析数据。SeaTunnel通过其高度可扩展和灵活的架构&#xff0c;帮助企业快速实现多源数据的采集、…...

基于单片机的多功能蓝牙语音智能台灯(论文+源码)

1总体方案设计 通过需求分析&#xff0c;本设计多功能蓝牙语音智能台灯的系统框图如图2.1所示&#xff0c;系统架构包括主控制器STM32F103单片机、HC-06蓝牙通信模块、LU-ASR01语音识别模块、OLED液晶、LED灯、按键等器件&#xff0c;在使用时用户可以通过手机APP、语音识别、…...

leetcode刷题记录(七十二)——146. LRU 缓存

&#xff08;一&#xff09;问题描述 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09;146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类&#xff1a; * LRUCache(int capacity)…...

力扣203题(3)

题目及之前的两种解法大家可以移步到这里&#xff1a; https://blog.csdn.net/suibiansa_/article/details/145242573?spm1001.2014.3001.5501 力扣203题—— 移除链表元素-CSDN博客 今天呢我们来写一下第三种解法&#xff1a; 虚拟创建一个头结点 ListNode firstnew Lis…...

网络安全:信息时代的守护者

随着互联网的快速发展&#xff0c;网络安全问题日益成为全球关注的焦点。无论是个人用户、企业组织还是政府部门&#xff0c;网络安全都已成为保障信息安全、保护隐私、确保社会秩序的基石。在这个数字化时代&#xff0c;如何应对复杂多变的网络安全威胁&#xff0c;成为了我们…...

【博客之星2024年度总评选】年度回望:我的博客之路与星光熠熠

【个人主页】Francek Chen 【人生格言】征途漫漫&#xff0c;惟有奋斗&#xff01; 【热门专栏】大数据技术基础 | 数据仓库与数据挖掘 | Python机器学习 文章目录 前言一、个人成长与盘点&#xff08;一&#xff09;机缘与开端&#xff08;二&#xff09;收获与分享 二、年度创…...

接口自动化测试

APITEST: 接口自动化测试 目录结构介绍&#xff1a; conf目录&#xff1a;用来存放项目运行环境、执行环境相关的配置参数 testsuite目录&#xff1a;测试用例在此目录编写&#xff0c;pytest默认约定test开头的文件和方法为测试用例&#xff0c;不满足条件的不会被执行&#x…...

题海拾贝:力扣 138.随机链表的复制

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…...

第7章:Python TDD测试Franc对象乘法功能

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

PyTorch基本功能与实现代码

PyTorch是一个开源的深度学习框架&#xff0c;提供了丰富的函数和工具&#xff0c;以下为其主要功能的归纳&#xff1a; 核心数据结构&#xff1a; • 张量&#xff08;Tensor&#xff09;&#xff1a;类似于Numpy的ndarray&#xff0c;是PyTorch中基本的数据结构&#xff0c…...

【2024 CSDN博客之星】技术洞察类:从DeepSeek-V3的成功,看MoE混合专家网络对深度学习算法领域的影响(MoE代码级实战)

目录 一、引言 1.1 本篇文章侧重点 1.2 技术洞察—MoE&#xff08;Mixture-of-Experts&#xff0c;混合专家网络&#xff09; 二、MoE&#xff08;Mixture-of-Experts&#xff0c;混合专家网络&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场…...

Single-Model and Any-Modality for Video Object Tracking——2024——cvpr-阅读笔记

Single-Model and Any-Modality for Video Object Tracking 摘要相关工作创新处MethodShared embeddingModal promptingRGB Tracker based on TransformerOverall ExperiimentDatasetRGB-D samples are sourced from DepthTrackRGB-T samples are extracted from LasHeRRGB-E s…...

Java中的构造器

Java中的构造器详解 1. 什么是构造器 构造器&#xff08;Constructor&#xff09; 是一种特殊的方法&#xff0c;用于在创建对象时初始化对象的状态。构造器的名字必须与类名相同&#xff0c;且没有返回类型&#xff0c;连 void 也不能使用。 2. 构造器的特点 名称与类名相同…...

Restormer: Efficient Transformer for High-Resolution Image Restoration解读

论文地址&#xff1a;Restormer: Efficient Transformer for High-Resolution Image Restoration。 摘要 由于卷积神经网络&#xff08;CNN&#xff09;在从大规模数据中学习可推广的图像先验方面表现出色&#xff0c;这些模型已被广泛应用于图像复原及相关任务。近年来&…...

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(3.纯python的实惠版)

前情&#xff1a; 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch&#xff08;1.标准版&#xff09;-CSDN博客 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch&#xff08;2.换掉付费的Event Hubs&#xff09;-CSDN博客 python脚本实现 厉害的…...

成就与远见:2024年技术与思维的升华

个人主页&#xff1a;chian-ocean 前言: 2025年1月17日&#xff0c;2024年博客之星年度评选——创作影响力评审的入围名单公布。我很荣幸能够跻身Top 300&#xff0c;虽然与顶尖博主仍有一定差距&#xff0c;但这也为我提供了更加明确的发展方向与指引。展望崭新的2025年&…...

BGP分解实验·9——路由聚合与条件性通告(1)

路由聚合是有效控制缩减BGP路由表的方法之一&#xff0c;路由聚合的前提和IGP一样&#xff0c;需要有路由目标存在BGP表中&#xff0c;与IGP不同的是&#xff0c;BGP路由聚合可以定义按需抑制路由的能力。 实验拓扑如下所示&#xff1a; 现在开始把从R1的R5的基础配置先准备好…...