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

C++和标准库速成(十)——类型别名、类型定义、类型推断和标准库简介

目录

  • 1. 类型别名
  • 2. 类型定义(不建议)
  • 3. 类型推断
    • 3.1 auto
      • 3.1.1 auto&
      • 3.1.2 auto*
      • 3.1.3 拷贝列表初始化和直接列表初始化
    • 3.2 decltype
  • 4. 标准库简介
  • 参考

1. 类型别名

  类型别名为现有的类型声明提供新名称。可以将类型别名视为用于为现有类型声明引入同义词而无须创建新类型的语法。以下为int*类型声明赋予新名称IntPtr:
  using IntPtr = int*;
  可以互换使用新的类型别名及其本来的名称。例如,以下两行有效。

int* p1;
IntPtr p2;

  使用新类型名称创建的变量与使用原始类型声明创建的变量完全兼容。因此,使用这些定义,编写以下内容是完全正确的,因为它们不仅是兼容的类型,还是完全相同的类型。

p1 = p2;
p2 = p1;

  类型别名最常见的用途是在原类型声明过于笨拙时提供可方便管理的名称。模板通常会出现这种情况。标准库本身的一个示例是std::basic_string<T>来表示字符串。这是一个类模板,其中T是字符串中每个字符的类型,例如char。每当要引用模板类型参数时,都必须指明它。为了声明变量,指定函数参数等等,必须要写basic_string<char>。

void processVector(const std::vector<std::basic_string<char>>& vec) {/* omitted */
}int main() {std::vector<std::basic_string<char>> myVector;processVector(myVector);
}

  因为basic_string<char>使用的频率如此之高,标准库便为其提供了一个更短也更为有意义的类型别名。
  using string = basic_string<char>;
  有了这个类型别名,之前的代码段可以被写得更加优雅。

void processVector(const std::vector<std::string>& vec) {/* omitted */
}int main() {std::vector<std::string> myVector;processVector(myVector);
}

2. 类型定义(不建议)

  类型别名是在C++11引入的。在C++11之前,必须使用typedef完成类似的操作,但是要复杂得多。这里仍将解释这种旧机制,因为你将在遗留代码中看到它。
  像类型别名一样,typedef为现有的类型声明提供新名称。例如,使用以下类型别名:
  using IntPtr = int*;
  可以用typedef将其改写为如下代码:
  typedef int* IntPtr;
  正如你所见,它的可读性降低了。顺序是颠倒的,即使对于专业的C++开发人员,也会引起很多混乱。除了更加复杂之外,typedef的行为与类型别名相同。例如,可以按如下方式使用typedef:
  IntPtr p;
  但是,类型别名和typedef并不完全等效。与typedef相比,类型别名与模板一起使用时功能更强大。
  警告:总是优先选择类型别名而不是typedef。

3. 类型推断

3.1 auto

  关键字auto有多种不同的用法(以下部分用法会在后面提及):
  1. 推断函数的返回类型。
  2. 结构化绑定。
  3. 推断表达式的类型。
  4. 推断非类型模板参数的类型。
  5. 简写函数模板的语法。
  6. decltype(auto)。
  7. 其他函数语法。
  8. 泛型lambda表达式。
  auto可用于告诉编译器,在编译期自动推断变量的类型。示例如下:
  auto x { 123 }; // x is of type int.
  在这个示例中,输入auto和输入int的效果没有什么区别,但auto对较复杂的类型会更有用。假定getFoo()函数有一个复杂的返回类型。如果希望把调用该函数的结果赋予一个变量,可以输入该复杂类型,也可以简单地使用auto,让编译器推断出该类型。
  auto result { getFoo() };
  这样,可方便地更改函数的返回类型,而不需要更新代码中调用该函数的所有位置。

3.1.1 auto&

  使用auto推断类型时去除了引用和const限定符。假设有以下函数:

const std::string message { "Test" };
const std::string& foo() {return message;
}

  可以调用foo(),把结果存储在一个变量中,将该变量的类型指定为auto,如下所示。
  auto f1 { foo() };
  因为auto去除了引用和const限定符,且f1是string类型,因此会建立一个副本。如果希望f1是一个const引用,就可以明确地将它建立为一个引用,并标记为const,如下所示。
  const auto& f2 { foo() };
  本章前面介绍了工具函数as_const(),它返回其引用参数的const引用版本。将as_const()与auto结合使用要小心。由于自动去除引用和const限定符,因此以下结果变量的类型为string,而不是const string&类型,因此将进行复制:

std::string str { "C++" };
auto result { std::as_const(str) };

  警告:始终要记住,auto去除了引用和const限定符,从而会创建副本!如果不需要副本,可使用auto&或者const auto&。

3.1.2 auto*

  auto关键字也可以用于指针,示例如下:

int i { 123 };
auto p { &i };

  p的类型是int*。与上一节讨论的引用不同,此处不存在意外复制的危险。但是,在使用指针时,建议使用auto*语法,因为它可以更清楚地指出此处涉及指针。例如:
  auto* p { &i };
  此外,使用auto*代替auto确实可以解决将auto、const和指针一起使用时的奇怪行为。假设你编写如下内容:
  const auto p1 { &i };
  大多数情况下,不会发生你期待的事情!通常,当使用const时,你想要保护指针所指的东西。你可能认为p1的类型为const int*,但实际上,该类型为int* const,因此它是指向非const整数的const指针。按如下所示将const放在auto后面无济于事;类型仍然是int* const。
  auto const p2 { &i };
  当将auto*与const结合使用时,它的行为就会与期望的一样。这是一个例子:
  const auto* p3 { &i };
  现在p3的类型为const int*。如果你真的需要一个const指针而不是const的整数,需要将const放在后面。
  auto* const p4 { &i };
  最后,使用这个语法可以令指针和整数都是const。
  const auto* const p5 { &i };
  p5的类型是const int* const。如果省略了*,将不能得到这个结果。

3.1.3 拷贝列表初始化和直接列表初始化

  有两种使用大括号初始化列表的初始化方式:
  1. 拷贝列表初始化:T obj = { arg1, arg2, … };
  2. 直接列表初始化:T obj { arg1, arg2, … };
  与自动类型推断相结合,拷贝列表初始化和C++17引入的直接列表初始化之间就存在重要的区别。从C++17之后,你会得到如下结果(需要<initializer_list>)。

// copy list initialization
auto a = { 11 }; // initializer_list<int>
auto b = { 11, 22 }; // initializer_list<int>// direct list initialization
auto c { 11 ]; // int
auto d { 11, 22 }; // error, too many elements.

  请注意,对于拷贝列表初始化,带括号的初始化程序中的所有元素都必须具有相同的类型。例如,以下内容会编译失败。
  auto b = { 11, 22.33 }; // compilation error.
  在早期的标准版本(C++11/14)中,拷贝列表初始化和直接列表初始化都将推断出initializer_list<>。

// copy list initialization
auto a = { 11 }; // initializer_list<int>
auto b = { 11, 22 }; // initializer_list<int>// direct list initialization
auto c { 11 ]; // initializer_list<int>
auto d { 11, 22 }; // initializer_list<int>

3.2 decltype

  关键字decltype把表达式作为实参,计算出该表达式的类型。例如:

int x { 123 };
decltype(x) y { 456 };

  在这个示例中,编译器推断出y的类型是int,因为这是x的类型。
  auto与decltype的区别在于,decltype未去除引用和const限定符。再来分析返回const string引用的foo()函数。按如下方式使用decltype定义f2,导致f2的类型为const string&,从而不生成副本。

decltype(foo()) f2 { foo() };

  刚开始不会觉得decltype有多大价值。但在模板环境中,decltype会变得十分强大。

4. 标准库简介

  C++具有标准库,其中包含许多有用的类,在代码中可方便地使用这些类。使用标准库中类的好处是不需要重新创建某些类,也不需要浪费时间去实现系统已经自动实现的内容。另一好处是标准库中的类已经过成千上万用户的严格测试和验证。标准库中的类也经过了性能优化,因此使用这些类在大多数情况下比使用自己的类效率更高。
  标准库中可用的功能非常多。后面将详细讲述标准库。当开始使用C++时,最好立刻了解标准库可以做什么。如果你是一位C程序员,这一点尤其重要。作为C程序员,使用C++可能会以C的方式解决问题,然而使用C++的标准库类可以更方便、安全地解决问题。

参考

[比] 马克·格雷戈勒著 程序喵大人 惠惠 墨梵 译 C++20高级编程(第五版)

相关文章:

C++和标准库速成(十)——类型别名、类型定义、类型推断和标准库简介

目录 1. 类型别名2. 类型定义(不建议)3. 类型推断3.1 auto3.1.1 auto&3.1.2 auto*3.1.3 拷贝列表初始化和直接列表初始化 3.2 decltype 4. 标准库简介参考 1. 类型别名 类型别名为现有的类型声明提供新名称。可以将类型别名视为用于为现有类型声明引入同义词而无须创建新类…...

Java JMX 未授权访问漏洞分析与修复指南

#作者&#xff1a;张桐瑞 文章目录 一、漏洞背景二、漏洞描述三、漏洞影响四、修复方案1. 禁用远程JMX访问&#xff1a;2. 配置JMX访问权限&#xff1a; 一、漏洞背景 Java管理扩展&#xff08;Java Management Extensions&#xff0c;简称JMX&#xff09;是Java平台的管理和…...

挂谷问题与挂谷猜想:从平面转针到高维拓扑

挂谷问题与挂谷猜想&#xff1a;从平面转针到高维拓扑 目录 挂谷问题的起源数学定义与基本性质研究进展挂谷集合与挂谷猜想王虹与Joshua Zahl的突破意义与影响 挂谷问题的起源 1917年&#xff0c;日本数学家挂谷宗一(かけや そういち Soichi Kakeya&#xff0c;1886-1947)提…...

区块链 智能合约安全 | 整型溢出漏洞

目录&#xff1a; 核心概念 溢出类型 上溢 原理 案例 下溢 原理 案例 练习 漏洞修复 使用 SafeMath 库&#xff08;旧版本&#xff09; 升级 Solidity 版本&#xff08;≥0.8.0&#xff09; 地址&#xff1a;zkanzz 整型溢出漏洞&#xff08;Integer Overflow/Underflow Vulne…...

C# HTTP 文件上传、下载服务器

程序需要管理员权限&#xff0c;vs需要管理员打开 首次运行需要执行以下命令注册URL&#xff08;管理员命令行&#xff09; netsh advfirewall firewall add rule name"FileShare" dirin actionallow protocolTCP localport8000 ipconfig | findstr "IPv4&quo…...

IDEA导入jar包后提示无法解析jar包中的类,比如无法解析符号 ‘log4j‘

IDEA导入jar包后提示无法解析jar包中的类 问题描述解决方法 问题描述 IDEA导入jar包的Maven坐标后&#xff0c;使用jar中的类比如log4j&#xff0c;仍然提示比如无法解析符号 log4j。 解决方法 在添加了依赖和配置文件后&#xff0c;确保刷新你的IDE项目和任何缓存&#xff…...

C++前缀和

个人主页&#xff1a;[PingdiGuo_guo] 收录专栏&#xff1a;[C干货专栏] 大家好&#xff0c;今天我们来了解一下C的一个重要概念&#xff1a;前缀和 目录 1.什么是前缀和 2.前缀和的用法 1.前缀和的定义 2.预处理前缀和数组 3.查询区间和 4.数组中某个区间的和是否为特定…...

kafka压缩

最近有幸公司参与kafka消息压缩&#xff0c;背景是日志消息量比较大。kafka版本2.4.1 一、确认压缩算法 根据场景不同选择不同。如果是带宽敏感患者推荐高压缩比的zstd&#xff0c;如果是cpu敏感患者推荐lz4 lz4和zstd底层都使用的是lz77算法&#xff0c;具体实现逻辑不同&am…...

C 语 言 --- 扫 雷 游 戏(初 阶 版)

C 语 言 --- 扫 雷 游 戏 初 阶 版 代 码 全 貌 与 功 能 介 绍扫雷游戏的功能说明游 戏 效 果 展 示游 戏 代 码 详 解game.htest.cgame.c 总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你 入 门 C 语 言 &#x1f4a1;个 人 主…...

黑鲨外设2025春季新品发布会:全球首款“冷暖双控”鼠标亮相!

据可靠消息称&#xff0c;电竞外设领域的创新引领者——黑鲨外设&#xff0c;正式官宣将于2025年3月28日17:00召开主题为“究极体验&#xff0c;竞在其中”春季新品发布会。据悉&#xff0c;此次新品发布会将于黑鲨游戏外设和黑鲨游戏手机官方平台同步直播&#xff0c;&#xf…...

SpringBoot-MVC配置类与 Controller 的扫描

文章目录 前言一、自动配置类位置二、自动配置类解析2.1 WebMvcAutoConfiguration2.1.1 EnableWebMvcConfiguration 2.2 DispatcherServletAutoConfiguration 三、RequestMapping 的扫描过程3.1 RequestMappingHandlerMapping#afterPropertiesSet3.2 RequestMappingHandlerMapp…...

Nexus L2 L3基本配置

接口基本配置 N7K上所有端口默认处于shutdown状态; N5K上所有端口默认处于no shutdown状态(所有端口都是switchport) 默认所有接口都是三层route模式, 只有当线卡不支持三层的时候, 接口才会处于二层switchport模式 show run all | in “system default” 创建SVI口需要提前打…...

asp.net 4.5在医院自助系统中使用DeepSeek帮助医生分析患者报告

环境&#xff1a; asp.net 4.5Visual Studio 2015本地已经部署deepseek-r1:1.5b 涉及技术 ASP.NET MVC框架用于构建Web应用程序。使用HttpWebRequest和HttpWebResponse进行HTTP请求和响应处理。JSON序列化和反序列化用于构造和解析数据。SSE&#xff08;服务器发送事件&#xf…...

LCCI ESG 中英联合认证国际分析师适合的岗位

LCCI ESG中英联合认证国际分析师领域热门岗位大揭秘&#xff01;&#x1f30d; 大家好&#xff01;今天我们来探讨LCCI ESG中英联合认证国际分析师领域的热门岗位&#xff0c;看看是否有适合你的选择。 1️⃣ LCCI ESG中英联合认证国际分析师报告专员&#xff1a;主要负责编制…...

AGI成立的条件

AGI&#xff08;通用人工智能&#xff09;的成立需满足多项核心条件&#xff0c;这些条件既涵盖技术能力层面的突破&#xff0c;也涉及伦理与认知维度的考量。 一、通用性与多任务处理能力 跨领域泛化能力 AGI需具备类似人类的通用性&#xff0c;能够灵活切换不同领域&#xf…...

论文阅读:2023 EMNLP SeqXGPT: Sentence-level AI-generated text detection

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 SeqXGPT: Sentence-level AI-generated text detection https://aclanthology.org/2023.emnlp-main.73/ https://github.com/Jihuai-wpy/SeqXGPT https://www.doubao.com/…...

解决python配置文件类configparser.ConfigParser,插入、读取数据,自动转为小写的问题

配置类 [Section1] Key_AAA Value[Section2] AnotherKey Value默认情况下&#xff0c;ConfigParser会将ini配置文件中的KEY&#xff0c;转为小写。 重载后配置类&#xff1a; 继承类从configparser.ConfigParser改为configparser.RawConfigParser重载方法optionxform&#…...

超图神经网络的详细解析与python示例

扩展传统集合关系至超边结构&#xff0c;处理高阶交互问题。 有关人工智能的数学基础之逻辑、集合论和模糊理论&#xff1a;看我文章人工智能的数学基础之逻辑、集合论和模糊理论-CSDN博客 一、超图神经网络概述 超图神经网络&#xff08;Hypergraph Neural Network&#xff0…...

机器视觉中图像的腐蚀和膨胀是什么意思?它能用来做什么?

​腐蚀&#xff08;Erosion&#xff09;​和膨胀&#xff08;Dilation&#xff09;​是两种基本的形态学操作&#xff0c;通常用于二值图像&#xff08;黑白图像&#xff09;的处理。它们是形态学图像处理的基础&#xff0c;广泛应用于图像分割、边缘检测、噪声去除等任务。 1…...

破局 MySQL 死锁:深入理解锁机制与高效解决方案

死锁的原理 1. 什么是死锁&#xff1f; 当 多个事务 在并发执行时&#xff0c;每个事务都 持有其他事务需要的锁&#xff0c;同时又在 等待对方释放锁&#xff0c;导致所有事务都无法继续执行的状态&#xff0c;称为 死锁&#xff08;Deadlock&#xff09;。 2. 死锁的四个必要…...

机器学习——分类、回归、聚类、LASSO回归、Ridge回归(自用)

纠正自己的误区&#xff1a;机器学习是一个大范围&#xff0c;并不是一个小的方向&#xff0c;比如&#xff1a;线性回归预测、卷积神经网络和强化学都是机器学习算法在不同场景的应用。 机器学习最为关键的是要有数据&#xff0c;也就是数据集 名词解释&#xff1a;数据集中的…...

脚本语言 Lua

概念 Lua由标准C编写而成&#xff0c;几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易地被C/C 代码调用&#xff0c;也可以反过来调用C/C的函数&#xff0c;这使得Lua在应用程序中可以被广泛应用。Lua并没有提供强大的库&#xff0c;它是不适合作为开发独立应…...

Spring相关面试题

目录 Spring中常用的注解有哪些 Spring Boot中RestController和Controller注解有什么区别&#xff1f; Spring的注解requestBody和responseBody的区别 说说Bean和componentscan的区别 简单介绍一下springboot Spring Boot有哪些常用的Starter依赖&#xff1f; 说说sprin…...

Python学习- 数据结构类型

一. list list_data [10, 20, 30]列表&#xff1a;是一个不限制类型&#xff0c;可增加&#xff0c;修改&#xff0c;删除的数据类型 可操作的方法&#xff1a;append&#xff0c;extend, pop&#xff0c;del &#xff0c;insert append: 可向list最后一个位置添加一个元…...

Azure Delta Lake、Databricks和Event Hubs实现实时欺诈检测

设计Azure云架构方案实现Azure Delta Lake和Azure Databricks&#xff0c;结合 Azure Event Hubs/Kafka 摄入实时数据&#xff0c;通过 Delta Lake 实现 Exactly-Once 语义&#xff0c;实时欺诈检测&#xff08;流数据写入 Delta Lake&#xff0c;批处理模型实时更新&#xff0…...

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试 嵌入式系统测试测试策略及测试流程嵌入式软件测试问题及测试方法嵌入式软件的测试流程游戏开发与测试过程游戏开发与通用软件的开发过程区别游戏测试主要内容…...

C#零基础入门篇(18. 文件操作指南)

## 一、文件操作基础 在C#中&#xff0c;文件操作主要通过System.IO命名空间中的类来实现&#xff0c;例如File、FileStream、FileInfo等。 ## 二、常用文件操作方法 ### &#xff08;一&#xff09;文件读取 1. **使用File.ReadAllText方法读取文件内容为字符串** …...

深入探究 JVM 堆的垃圾回收机制(一)— 判活

垃圾回收分为两步&#xff1a;1&#xff09;判定对象是否存活。2&#xff09;将“消亡”的对象进行内存回收。 1 判定对象存活 可达性分析算法&#xff1a;通过一系列“GC Roots”对象作为起始节点集&#xff0c;从这些节点开始&#xff0c;根据引用关系向下搜索&#xff0c;…...

SQL优化主要有哪些方式

对经常查询的区分度高的条件字段建立索引&#xff0c;也就是用在where条件里的字段。使用没有建立索引的非主键字段作为条件查询时&#xff0c;会进行全表扫描&#xff0c;因为这个字段的数据分步是不规律的&#xff0c;但是需要避免在频繁更新的字段上建立索引&#xff0c;因为…...

基于Spring Boot的公司资产网站的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#xff0c;有需要的可以来看看。 一、…...

OSPF 协议详解:从概念原理到配置实践的全网互通实现

什么是OSPF OSPF&#xff08;开放最短路径优先&#xff09;是由IETF开发的基于链路状态的自治系统内部路由协议&#xff0c;用来代替存在一些问题的RIP协议。与距离矢量协议不同&#xff0c;链路状态路由协议关心网络中链路活接口的状态&#xff08;包括UP、DOWN、IP地址、掩码…...

【C++】多态

目录 文章目录 前言 一、多态的概念 二、多态的定义及实现 三、重载/重写/隐藏的对比 四、纯虚函数和抽象类 五、多态的原理 总结 前言 本文主要讲述C中的多态&#xff0c;涉及的概念有虚函数、协变、纯虚函数、抽象类、虚表指针和虚函数表等。 一、多态的概念 多态分…...

CentOS 8 停止维护后通过 rpm 包手动安装 docker

根据 Docker官方文档 的指引&#xff0c;进入 Docker rpm 包下载的地址&#xff0c;根据自己系统的架构和具体版本选择对应的路径 这里使用 Index of linux/centos/7/x86_64/stable/ 版本&#xff0c;根据 docker 官方的给出的安装命令选择性的下载对应的 rpm 包 最终使用 yum …...

STT-MRAM CIM 赋能边缘 AI:高性能噪声鲁棒贝叶斯神经网络宏架构详解

引言 近年来&#xff0c;基于卷积神经网络&#xff08;CNN&#xff09;和视觉转换器&#xff08;ViT&#xff09;的存算一体&#xff08;CIM&#xff09;边缘AI设备因其低延迟、高能效、低成本等性能受到越来越广泛的关注。然而&#xff0c;当环境中存在噪声时&#xff08;例如…...

Performance Hub Active Report

Performance Hub 是 Oracle Enterprise Manager Database Express &#xff08;EM Express&#xff09; 中的一项功能&#xff0c;可提供给定时间范围内所有性能数据的新整合视图。用户可以使用 Database Express 页面顶部的时间选择器选择时间范围&#xff0c;详细信息选项卡将…...

小白闯AI:Llama模型Lora中文微调实战

文章目录 0、缘起一、如何对大模型进行微调二、模型微调实战0、准备环境1、准备数据2、模型微调第一步、获取基础的预训练模型第二步:预处理数据集第三步:进行模型微调第四步:将微调后的模型保存到本地4、模型验证5、Ollama集成部署6、结果测试三、使用总结AI是什么?他应该…...

【数学建模】TOPSIS法简介及应用

文章目录 TOPSIS法的基本原理TOPSIS法的基本步骤TOPSIS法的应用总结 在 多目标决策分析中&#xff0c;我们常常需要在多个选择中找到一个最优解。 TOPSIS&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff09;法是一个广泛应用的决策方法…...

优选算法训练篇08--力扣15.三数之和(难度中等)

目录 1.题目链接&#xff1a;15.三数之和 2.题目描述&#xff1a; 3.解法(排序双指针) 1.题目链接&#xff1a;15.三数之和 2.题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &…...

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…...

RAG 架构地基工程-Retrieval 模块的系统设计分享

目录 一、知识注入的关键前奏——RAG 系统中的检索综述 &#xff08;一&#xff09;模块定位&#xff1a;连接语言模型与知识世界的桥梁 &#xff08;二&#xff09;核心任务&#xff1a;四大关键问题的协调解法 &#xff08;三&#xff09;系统特征&#xff1a;性能、精度…...

解决stm32引脚如果选择输入模式

1. 输入模式分类 STM32的GPIO输入模式主要分为以下四种&#xff1a; 浮空输入&#xff08;Floating Input / Input Floating&#xff09; 上拉输入&#xff08;Input Pull-Up&#xff09; 下拉输入&#xff08;Input Pull-Down&#xff09; 模拟输入&#xff08;Analog Inp…...

Java 填充 PDF 模版

制作 PDF 模版 安装 OnlyOffice 从 OnlyOffice 官网下载 OnlyOffice Desktop&#xff0c;安装过程很简单&#xff0c;一路下一步即可。用 OnlyOffice 制作 PDF 模版&#xff08;表单&#xff09; 使用 OnlyOffice 表单设计器&#xff0c;制作表单&#xff0c;如下图 注意命名…...

Maven安装与环境配置

首先我们先介绍一些关于Maven的知识&#xff0c;如果着急直接看下面的安装教程。 目录 Maven介绍 Maven模型 Maven仓库 Maven安装 下载 安装步骤 Maven介绍 Apache Maven是一个项目管理和构建工具&#xff0c;它基于项目对象模型(Project Object Model , 简称: POM)的概念…...

鸿蒙HarmonyOS NEXT应用崩溃分析及修复

鸿蒙HarmonyOS NEXT应用崩溃分析及修复 如何保证应用的健壮性&#xff0c;其中一个指标就是看崩溃率&#xff0c;如何降低崩溃率&#xff0c;就需要知道存在哪些崩溃&#xff0c;然后对症下药&#xff0c;解决崩溃。那么鸿蒙应用中存在哪些崩溃类型呢&#xff1f;又改如何解决…...

基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统

一、功能概述 本工具通过PySide6构建用户界面&#xff0c;结合PyCATIA库实现CATIA V5的自动化操作&#xff0c;提供两大核心功能&#xff1a; ​空几何体清理&#xff1a;智能识别并删除零件文档中的无内容几何体&#xff08;Bodies&#xff09;​空几何图形集清理&#xff1…...

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…...

Mysql深分页的解决方案

在数据量非常大的情况下&#xff0c;深分页查询则变得很常见&#xff0c;深分页会导致MySQL需要扫描大量前面的数据&#xff0c;从而效率低下。例如&#xff0c;使用LIMIT 100000, 10时&#xff0c;MySQL需要扫描前100000条数据才能找到第10000页的数据。 在MySQL中解决深分页…...

使用pycel将Excel移植到Python

1.适用需求 有些工作可能长期适用excel来进行公式计算&#xff0c;当需要把工作流程转换为可视化界面时&#xff0c;开发人员不懂专业逻辑&#xff0c;手动摸索公式很大可能出错&#xff0c;而且费时费力 2.可用工具及缺点 pandas 方便进行数据处理&#xff0c;支持各种格…...

Apache Tomcat CVE-2025-24813 安全漏洞

Apache Tomcat CVE-2025-24813被广泛利用&#xff0c;但是他必须要满足两个点&#xff1a; 1.被广泛的使用&#xff0c;并且部署在服务器中。 2.漏洞必须依赖在服务器中的配置。 并且漏洞补丁已经发布。 漏洞攻击方式&#xff1a; CVE-2025-24813 是 Apache Tomcat 部分 PUT…...