《类和对象(下)》
引言:
书接上回,如果说类和对象(上)是入门阶段,类和对象(中)是中间阶段,那么这次的类和对象(下)就可以当做类和对象的补充及收尾。
一:再探构造函数
- 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。
- 每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。
- 引用成员变量,
const
成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错。 - C++11支持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显示在初始化列表初始化的成员使用的。
- 尽量使用初始化列表初始化,因为那些你不在初始化列表初始化的成员也会走初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会用这个缺省值初始化。如果你没有给缺省值,对于没有显示在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。对于没有显示在初始化列表初始化的自定义类型成员会调用这个成员类型的默认构造函数,如果没有默认构造会编译错误。
- 初始化列表中按照成员变量在类中声明顺序进行初始化,跟成员在初始化列表出现的的先后顺序无关。建议声明顺序和初始化列表顺序保持一致。
场景一:初始化列表形式
解读:这里我们虽然在初始化列表中没有对_day
初始化,但是在声明中给了缺省值,所以这时在初始化列表中就会拿其缺省值来进行初始化。
这里需要注意的是声明这里只是给缺省值,并不是初始化。
场景二:自定义类型的初始化列表
在C++中规定,如果自定义类型的成员没有默认构造函数,这时候自定义类型就需要自己来写构造函数,而且如果成员还是类类型的变量就必须用初始化列表来初始化。
这里我们拿之前的stack
和Myqueue
来举例子:
这里Stack
的构造函数我们故意显示的写成带参的,这样编译器就不会再生成构造函数,这时Stack
就是没有默认构造函数的。
这里可以看到这里在创建Myqueue
类型的对象时就无法初始化,那么这时候就需要自己来写构造函数,但是这里怎么初始化呢?没法写啊,这里就需要用到初始化列表:
这样就可以实现自定义类型中类类型成员的初始化了。
牛刀小试:
下面这个程序的运行结果?
解析:由于初始化列表在初始化时是按照成员的声明顺序进行初始化的,所以这里是先初始化_a2
,但是这时_a1
还是一个随机值,因此_a2
被初始化为了随机值,接着再拿1来初始化_a1
,所以_a1
为1,_a2
为随机值。
下面我们运行程序来验证一下:
和我们分析的一样。
小结:成员变量走初始化列表的逻辑
- 无论是否显示写初始化列表,每个构造函数都有初始化列表。
- 无论是否在初始化列表显示初始化成员变量,每个成员变量都要走初始化列表初始化。
二:类型转换
- C++支持内置类型隐式类型转换为类类型对象,但是需要有相关内置类型为参数的构造函数。
- 构造函数前面加
explicit
就不再支持隐式类型转换。 - 类类型的对象之间也可以隐式转换,需要相应的构造函数支持。
场景一:内置类型转类类型对象
这是我们写的一个类A
这里就是类型转换的一个场景,并且可以看到编译器对其进行了优化,省去了拷贝构造这一步骤。
场景二:对类型转换临时对象的引用
场景三:多参数转换
注:C++11之后才支持的多参数的类型转换。
场景四:类类型对象的隐式转换
场景五:explicit 来禁用隐式类型转换
这里我们对单参数的那个构造函数加了explicit
来修饰,所以单参数的隐式类型转换就不支持了,但是两个参数的隐式类型转换还是支持的。
小结:
- 如果想用隐式类型转换,需要有对应的内置类型为参数的构造函数来支持。
- 对于这个过程是否优化,取决于具体的编译器。
三:static成员
- 用
static
修饰的成员变量,称之为静态成员变量,静态成员变量一定要在类外进行初始化。 - 静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。
- 用
static
修饰的成员函数,称之为静态成员函数,静态成员函数没有this
指针。 - 静态成员函数中可以访问其他的静态成员,但是不能访问非静态的,因为没有
this
指针。 - 非静态的成员函数,可以访问任意的静态成员变量和静态成员函数。
- 突破类域就可以访问静态成员,可以通过
类名::静态成员
或者对象.静态成员
来访问静态成员变量和静态成员函数。 - 静态成员也是类的成员,受
public、protected、private
访问限定符的限制。 - 静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员变量不属于某个对象,不走构造函数初始化列表。
场景一:统计编译器创建了多少类
可以看到是创建了三个类。
场景二:解决特殊问题
1. 题目:
2.分析:
这道题要求我们计算1到n的和,看似简单,但这道题给了我们一堆限制条件,这一下子让我们没有了思路,这里我就直接说怎么做了,我们可以利用构造函数自动调用的特性来解决,创建一个静态变量,然后每次自动调用构造函数时都累加上这个变量上,最后就能计算出1到n的和。
3. 代码:
4. 题目传送门:
JZ64 求1+2+3+…+n
小结:
静态变量的意义:尽可能减少全局变量的使用。
四:友元
- 友元提供了一种突破类访问限定符封装的方式,友元分为:友元函数和友元类,在函数声明或者类声明的前面加
friend
,并且把友元声明放到一个类的里面。 - 外部友元函数可访问类的私有和保护成员,友元函数仅仅是⼀种声明,他不是类的成员函数。
- 友元函数可以在类定义的任何地方声明,不受类访问限定符限制。
- 一个函数可以是多个类的友元函数。
- 友元类中的成员函数都可以是另一个类的友元函数,都可以访问另一个类中的私有和保护成员。
- 友元类的关系是单向的,不具有交换性,比如A类是B类的友元,但是B类不是A类的友元。
- 友元类关系不能传递,如果A是B的友元,B是C的友元,但是A不是C的友元。
- 有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
流插入与流提取
我们知道C++中的输入输出可以自动识别类型,所谓的自动识别其实还是函数重载的作用。
在C++网站上查询ostream
时可以看到它的一堆重载。
分析打印过程:
1. 流插入重载
这里我们就拿之前实现的日期类来实现一下自定义类型的流插入和流提取的重载
一开始我们可能会这样写:
但是打印的时候我们这样写还不行,因为参数匹配反了,在类里面实现的重载,第一个参数默认为this
指针,在这里this
指针接收的是d1
的地址,所以第一个参数是类类型的指针,第二个参数才是ostream
,因此打印的时候要这样写:
但是这样写跟我们之前的打印不一样,感觉挺尴尬的。
为什么库函数里面实现的重载参数就能匹配上呢?
那是因为库函数里面是在ostream
类里面实现的,this
指针接收的是ostream
类类型,我们在调用函数时,正好将cout
传过去被this
指针接收,因此就对上了,但是我们不能随意修改库函数啊,所以我们就只好将其写成全局的函数了。
这样的话参数匹配不上的问题就解决了,但是这里又遇到了新的问题:这里牵扯到了访问私有成员,如果像之前一样都写单独的成员函数来获取的话就特别麻烦,因此这里我们引入 友元 这一概念来解决这一问题。
注:这里为了避免链接错误,可以让这个重载函数成为内联函数。
2. 流提取重载
注:这里需要注意的是第二个参数就不能加const
了,因为如果加const
的话就该参数就为常量,就不能再给其输入值了。
加上这两个其实这个日期类就比较完善了,但是我们在输入时还需要考虑一种情况:如果输入的日期非法呢?所以在输入这里我们可以再完善一下:
经过上面的补充,这个日期类就相对完善了。
同一个函数的多个友元
小结:
虽然友元有时候提供了便利。但是友元在一定程度上会增加耦合度,破坏了封装,所以友元不宜多用。
五:说明
前四个板块是需要重点来理解和掌握的,后面几个简单了解
六:内部类
- 如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,跟定义在全局相比,内部类只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类。
- 内部类默认是外部类的友元类。
- 内部类本质也是一种封装,当
A
类跟B
类紧密关联,A
类实现出来主要就是给B
类使用,那么可以考虑把A
类设计为B
的内部类,如果放到private/protected
位置,那么A
类就是B
类的专属内部类,其他地方都用不了。
场景一:计算带有内部类的类大小
可以看到计算外部类A
的时候,内部类并没有计入其中。
场景二:友元性质
注:由于内部类B
默认为外部类A
的友元类,因此B
可以访问A
的私有成员_a
七:匿名对象
- 用类型(实参)定义出来的对象叫做匿名对象,相比之前我们定义的类型 对象名 (实参)定义出来的叫有名对象。
- 匿名对象生命周期只在当前一行,一般临时定义一个对象当前用一下即可,就可以定义匿名对象。
场景一:有名对象 临时对象 匿名对象 举例
场景二:用匿名对象来简化步骤(特定情况下)
解读:当我们只是单纯地想调用某个函数时,先创建有名对象再通过对象调用这个函数就比较繁琐,通过匿名对象我们就可以一步完成调用,而且匿名对象的生命周期只是当前一行,就像一次性纸杯一样。
注:const
可以延长临时变量的生命周期
八:对象拷贝时的编译器优化
- 现代编译器会为了尽可能提高程序的效率,在不影响正确性的情况下会尽可能减少一些传参和传返回值的过程中可以省略的拷贝。
- 如何优化C++标准并没有严格规定,各个编译器会根据情况自行处理。当前主流的相对新⼀点的编译器对于连续⼀个表达式步骤中的连续拷贝会进行合并优化,有些更新更"激进"的编译器还会进行跨行跨表达式的合并优化。
linux下
可以将下面代码拷贝到test.cpp
⽂件,编译时用g++ test.cpp -fno-elide- constructors
的方式关闭构造相关的优化。
场景一:隐式类型转换时的编译器优化
- 正常步骤:
1
构造临时对象,临时对象再拷贝构造aa1
- 优化之后:
1
直接构造aa1
场景二:传值传参(无优化)
- 在创建对象
aa2
时调用了构造函数,在传值传参的时候调用了拷贝构造函数。 - 在传值传参时,编译器没有进行优化。
场景三:隐式类型传参
- 正常步骤:
1
构造临时对象,这个临时对象再拷贝构造给一个新的对象。 - 优化后:
1
直接构造新的对象。
场景五: 传值返回
- 正常步骤:先构造局部对象
aa
,再拷贝构造一份aa
的形参(临时对象)返回。 - 优化后:直接构造然后返回。
场景六: 拷贝构造+赋值重载(无法完全优化)
- 正常步骤:
aa
先构造局部对象,然后调用拷贝构造函数来生成一份要返回的临时对象,然后接收返回值的对象aa1
来接收这个临时对象,这里会调用拷贝构造函数,之后aa2
调用构造函数初始化,aa2
再调用赋值重载函数来拿aa1
来完成赋值。 - 优化后: 编译器进行了跨行合并优化,将构造的局部对象
aa
和拷贝临时对象合
并为一个直接构造,剩下的没有进行优化。
小结:
- 不同版本的编译器以及不同的编译器的优化是不确定的。
- 在接收返回值是用拷贝构造比赋值重载的方式更好,更方便编译器的优化。
总结:
到这里,类和对象我们就算是学完了,可以说已经入门C++了(开心),不过后面要学的东西还多呢(大声)
本篇完结撒花!!!
相关文章:
《类和对象(下)》
引言: 书接上回,如果说类和对象(上)是入门阶段,类和对象(中)是中间阶段,那么这次的类和对象(下)就可以当做类和对象的补充及收尾。 一:再探构造…...
基于STM32、HAL库的TLV320AIC3101IRHBR音频接口芯片驱动程序设计
一、简介: TLV320AIC3101IRHBR 是 Texas Instruments 推出的高性能、低功耗音频编解码器,专为便携式和电池供电设备设计。它集成了立体声 ADC、DAC、麦克风前置放大器、耳机放大器和数字信号处理功能,支持 I2S/PCM 音频接口和 I2C 控制接口,非常适合与 STM32 微控制器配合…...
EDR与XDR如何选择适合您的网络安全解决方案
1. 什么是EDR? 端点检测与响应(EDR) 专注于保护端点设备(如电脑、服务器、移动设备)。通过在端点安装代理软件,EDR实时监控设备活动,检测威胁并快速响应。 EDR核心功能 实时监控:…...
Vue2 elementUI 二次封装命令式表单弹框组件
需求:封装一个表单弹框组件,弹框和表单是两个组件,表单以插槽的形式动态传入弹框组件中。 使用的方式如下: 直接上代码: MyDialog.vue 弹框组件 <template><el-dialog:titletitle:visible.sync"dialo…...
jenkins流水线常规配置教程!
Jenkins流水线是在工作中实现CI/CD常用的工具。以下是一些我在工作和学习中总结出来常用的一些流水线配置:变量需要加双引号括起来 "${main}" 一 引用无账号的凭据 使用变量方式引用,这种方式只适合只由密码,没有用户名的凭证。例…...
设计模式系列(02):设计原则(一):SRP、OCP、LSP
本文为设计模式系列第2篇,聚焦面向对象设计的三大核心原则:单一职责、开放封闭、里氏替换,系统梳理定义、实际业务场景、优缺点、最佳实践与常见误区,适合系统学习与团队协作。 目录 1. 引言2. 单一职责原则(SRP)3. 开放封闭原则(OCP)4. 里氏替换原则(LSP)5. 常见误区…...
【日常】AI 工作流
AI 工作流 名称使用场景产品形态其他ChatGPT网页LLMGemini可以生成一份深度研究的文档并保存到Google Docs网页LLM白嫖了一年会员Kimi日常网页LLMDeepSeek深度思考网页LLMGrok3Deep Research 深度搜索网页LLMQwen3网页LLM元宝可免费使用DS的深度思考(满血DS R1版&a…...
问题及解决02-处理后的图像在坐标轴外显示
一、问题 在使用matlab的appdesigner工具来设计界面,可以通过点击处理按钮来处理图像,并将处理后的图像显示在坐标轴上,但是图像超出了指定的坐标轴,即处理后的图像在坐标轴外显示。 问题图如下图所示。 原来的坐标轴如下图所…...
Spark基础介绍
Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 起源阶段 Spark 最初是在 2009 年由加州大学伯克利分校的 AMP 实验室开发。当时,Hadoop 在大数据处理领域占据主导地位,但 MapReduce 在某些复杂计算场景下,如迭代计算和交互…...
Oracles数据库通过存储过程调用飞书接口推送群组消息
在Oracle数据库中,可以通过存储过程调用外部接口来实现推送消息的功能。以下是一个示例,展示如何通过存储过程调用飞书接口推送群组消息。 创建存储过程 首先,创建一个存储过程,用于调用飞书接口。该存储过程使用UTL_HTTP包来发送HTTP请求。 CREATE OR REPLACE PROCEDUR…...
ubuntu22.04编译PX4无人机仿真实践
克隆PX4源码,并且更新子模块 git clone https://github.com/PX4/PX4-Autopilot.git --recursive git submodule update --init --recursive # 强制同步所有子模块 接着安装相关依赖: bash ./PX4-Autopilot/Tools/setup/ubuntu.sh 运行以下命令进行编译: cd ~/PX4-Autop…...
MySQL基础入门:MySQL简介与环境搭建
引言 在数字化转型浪潮中,MySQL作为数据存储的"基石引擎",支撑着从电商交易到金融风控的各类核心业务。其高并发处理能力、灵活的架构设计及跨平台兼容性,使其成为开发者技术栈中的"常青树"。本章节将通过历史溯源、技术…...
无人机避障——(运动规划部分)深蓝学院动力学kinodynamic A* 3D算法理论解读(附C++代码)
开源代码链接:GitHub - Perishell/motion-planning 效果展示: ROS 节点展示全局规划和轨迹生成部分: Kinodynamic A*代码主体: int KinoAstar::search(Eigen::Vector3d start_pt, Eigen::Vector3d start_vel,Eigen::Vector3d en…...
电脑声音小怎么调大 查看声音调整方法
电脑是我们工作学习经常需要用到的工具,同时电脑也可以播放音乐、视频、游戏等,享受声音的效果。但是,有些电脑的声音很小,即使把音量调到最大,也听不清楚,这让我们很苦恼。那么,电脑声音小怎么…...
无人机信号监测系统技术解析
一、模块技术要点 1. 天线阵列与信号接收模块 多频段自适应切换:采用天线阵列模块,根据复杂地形和不同频段自动切换合适的天线,提升信号接收灵敏度。 双天线测向技术:通过双天线的RSSI(信号接收强度)差值…...
Excel的详细使用指南
### **一、Excel基础操作** #### **1. 界面与基本概念** - **工作簿(Workbook)**:一个Excel文件(扩展名.xlsx)。 - **工作表(Worksheet)**:工作簿中的单个表格(默认名…...
基于SSM实现的健身房系统功能实现十六
一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人们健康意识的不断提升,健身行业也在迅速扩展。越来越多的人加入到健身行列,健身房的数量也在不断增加。这种趋势使得健身房的管理变得越来越复杂,传统的手工或部分自动化的管…...
序列化和反序列化(hadoop)
1.先将上一个博客的Student复制粘贴后面加上H 在StudentH中敲下面代码 package com.example.sei; import org.apache.hadoop.io.Writable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; //学生类,姓名,年龄 //支…...
大模型MCP_MCP从流式SSE到流式HTTP_1.8.0支持流式HTTP交互_介绍_从应用到最优--人工智能工作笔记0245
从最开始的大模型时代,到现在MCP,大模型技术,人工智能技术迭代真的非常快 之前的大模型更像一个大脑,能帮大家出点子,然后告诉你思路,你去解决问题,但是 一直不能自己解决问题,后来出来了通用的manus智能体,声称可以解决很多问题.直接操作 一个自带的电脑,但是也有局限性,还…...
docker大镜像优化实战
在 Docker 镜像优化方面,有许多实战技巧可以显著减小镜像体积、提高构建效率和运行时性能。以下是一些实用的优化策略和具体操作方法: 1. 选择合适的基础镜像 策略 使用 Alpine 版本:Alpine 镜像通常只有 5-10MB,比 Ubuntu/Deb…...
【25软考网工】第六章(5)应用层安全协议
博客主页:christine-rr-CSDN博客 专栏主页:软考中级网络工程师笔记 大家好,我是christine-rr !目前《软考中级网络工程师》专栏已经更新三十篇文章了,每篇笔记都包含详细的知识点,希望能帮助到你ÿ…...
RevIN(Reversible Instance Normalization)及其在时间序列中的应用
详细介绍 RevIN(Reversible Instance Normalization)及其在时间序列中的应用 1. RevIN 的定义与背景 RevIN(可逆实例归一化)是一种专门为时间序列预测设计的归一化方法,旨在处理非平稳数据(non-stationar…...
JSON 和 cJSON 库入门教程
第一部分:了解 JSON (JavaScript Object Notation) 什么是 JSON? JSON 是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。 JSON 基于 JavaScript 编程语言的一个子集,但它是一种独立于语言的文本格式…...
Unity 2D 行走动画示例工程手动构建教程-AI变成配额前端UI-完美游戏开发流程
🎮 Unity 2D 行走动画示例工程手动构建教程 ✅ 1. 新建 Unity 项目 打开 Unity Hub: 创建一个新项目,模板选择:2D Core项目名:WalkAnimationDemo ✅ 2. 创建文件夹结构 在 Assets/ 目录下新建以下文件夹:…...
[Java][Leetcode middle] 45. 跳跃游戏 II
这题没做出来,看的答案解析 可以理解为希望采用最少得跳槽次数跳到最高级别的公司。 下标i为公司本身的职级,每个公司可以提供本身等级nums[i]的职级提升。 每次从这些选择中选择自己能够达到最大职级的公司跳槽。 public int jump(int[] nums) {if(nu…...
leetcode 3335. 字符串转换后的长度 I
给你一个字符串 s 和一个整数 t,表示要执行的 转换 次数。每次 转换 需要根据以下规则替换字符串 s 中的每个字符: 如果字符是 z,则将其替换为字符串 "ab"。否则,将其替换为字母表中的下一个字符。例如,a 替…...
Leetcode 3542. Minimum Operations to Convert All Elements to Zero
Leetcode 3542. Minimum Operations to Convert All Elements to Zero 1. 解题思路2. 代码实现 题目链接:3542. Minimum Operations to Convert All Elements to Zero 1. 解题思路 这一题的处理方法其实还是挺好想明白的,其实就是从小到大依次处理各个…...
如何使用C51的Timer0实现定时功能
在C51单片机中,使用定时器0(Timer0)实现定时功能需要以下步骤: 1. 定时器基础知识 时钟源:C51的定时器时钟来源于晶振(如12MHz)。机器周期:1个机器周期 12个时钟周期(1…...
Day1 时间复杂度
一 概念 在 C 中,时间复杂度是衡量算法运行时间随输入规模增长的趋势的关键指标,用于评估算法的效率。它通过 大 O 表示法(Big O Notation) 描述,关注的是输入规模 n 趋近于无穷大时,算法时间增长的主导因…...
PostgreSQL 配置设置函数
PostgreSQL 配置设置函数 PostgreSQL 提供了一组配置设置函数(Configuration Settings Functions),用于查询和修改数据库服务器的运行时配置参数。这些函数为数据库管理员提供了动态管理数据库配置的能力,无需重启数据库服务。 …...
美学心得(第二百七十六集) 罗国正
美学心得(第二百七十六集) 罗国正 (2025年4月) 3275、人类将迎来真、善、美快速发展的时期,人‐机合一的天人合一(可简称为“天人机合一”)的境界已渐露头角,在优秀的人群中迅猛地…...
描述性统计工具 - AxureMost 落葵网
描述性统计工具是用于汇总和分析数据,以更好地了解数据特征的工具1。以下是一些常见的描述性统计工具简介: 描述性统计工具 Excel 基本统计函数:提供了丰富的函数用于计算描述性统计量。例如,AVERAGE 函数用于计算平均值…...
mybatis中${}和#{}的区别
先测试,再说结论 userService.selectStudentByClssIds(10000, "wzh or 11");List<StudentEntity> selectStudentByClssIds(Param("stuId") int stuId, Param("field") String field);<select id"selectStudentByClssI…...
【OpenCV】网络模型推理的简单流程分析(readNetFromONNX、setInput和forward等)
目录 1.模型读取(readNetFromONNX())1.1 初始化解析函数(parseOperatorSet())1.2 提取张量(getGraphTensors())1.3 节点处理(handleNode()) 2.数据准备(blobFromImage() …...
代码随想录算法训练营第三十九天
LeetCode题目: 115. 不同的子序列583. 两个字符串的删除操作72. 编辑距离 其他: 今日总结 往期打卡 115. 不同的子序列 跳转: 115. 不同的子序列 学习: 代码随想录公开讲解 问题: 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数。 测试用例保…...
InternVL3: 利用AI处理文本、图像、视频、OCR和数据分析
InternVL3推动了视觉-语言理解、推理和感知的边界。 在其前身InternVL 2.5的基础上,这个新版本引入了工具使用、GUI代理操作、3D视觉和工业图像分析方面的突破性能力。 让我们来分析一下是什么让InternVL3成为游戏规则的改变者 — 以及今天你如何开始尝试使用它。 InternVL…...
力扣刷题Day 48:盛最多水的容器(283)
1.题目描述 2.思路 学习了Krahets佬的双指针思路,初始化两个边界作为容器边界,然后逐个向数组内遍历,直到左右两指针相遇。 3.代码(Python3) class Solution:def maxArea(self, height: List[int]) -> int:left,…...
基于单应性矩阵变换的图像拼接融合
单应性矩阵变换 单应性矩阵是一个 3x3 的可逆矩阵,它描述了两个平面之间的投影变换关系。在图像领域,单应性矩阵可以将一幅图像中的点映射到另一幅图像中的对应点,前提是这两幅图像是从不同视角拍摄的同一平面场景。 常见的应用场景&#x…...
《驱动开发硬核特训 · 专题篇》:深入理解 I2C 子系统
关键词:i2c_adapter、i2c_client、i2c_driver、i2c-core、platform_driver、设备树匹配、驱动模型 本文目标:通过实际代码一步步讲清楚 I2C 子系统的结构与运行机制,让你不再混淆 platform_driver 与 i2c_driver 的职责。 🧩 一、…...
Spark缓存-cache
一、RDD持久化 1.什么时候该使用持久化(缓存) 2. RDD cache & persist 缓存 3. RDD CheckPoint 检查点 4. cache & persist & checkpoint 的特点和区别 特点 区别 二、cache & persist 的持久化级别及策略选择 Spark的几种持久化…...
tails os系统详解
一、起源与发展背景 1. 项目初衷与历史 创立时间:Tails 项目始于 2004 年,最初名为 “Anonymous Live CD”,2009 年正式更名为 “Tails”(The Amnesic Incognito Live System,“健忘的匿名实时系统”)。核…...
[洛谷刷题9]
P2376 [USACO09OCT] Allowance G(贪心) https://www.luogu.com.cn/problem/P2376 题目描述 作为创造产奶纪录的回报,Farmer John 决定开始每个星期给Bessie 一点零花钱。 FJ 有一些硬币,一共有 N ( 1 ≤ N ≤ 20 ) N (1 \le …...
数据挖掘入门-二手车交易价格预测
一、二手车交易价格预测 1-1 项目背景 随着二手车市场的快速发展,二手车交易价格的预测成为了一个热门研究领域。精准的价格预测不仅能帮助买卖双方做出更明智的决策,还能促进市场的透明度和公平性。对于买家来说,了解合理的市场价格可以避免…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.4 模型部署与定期评估
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 10.4 模型部署与定期评估10.4.1 模型部署架构设计1.1 模型存储方案1.2 实时预测接口 10.4.2 定期评估体系构建2.1 评估指标体系2.2 自动化评估流程2.3 模型衰退预警 10.4.3 …...
构建可信数据空间需要突破技术、规则和生态三大关键
构建可信数据空间需要突破技术、规则和生态三大关键:技术上要解决"可用不可见"的隐私计算难题,规则上要建立动态确权和跨境流动的治理框架,生态上要形成多方协同的标准体系。他强调,只有实现技术可控、规则可信、生态协…...
阳光学院【2020下】计算机网络原理-A卷-试卷-期末考试试卷
一、单选题(共25分,每空1分) 1.ICMP协议工作在TCP/IP参考模型的 ( ) A.主机-网络 B.网络互联层 C.传输层 D.应用层 2.下列关于交换技术的说法中,错误的是 ( ) A.电路交换适用于突发式通信 B.报文交换不能满足实时通信 C.报文…...
python: union()函数用法
在 Python 中,union() 是集合(set)类型的内置方法,用于返回两个或多个集合的并集(即所有元素的合集,自动去重)。以下是它的用法详解: 1. 基本语法 python 复制 下载 set.union(*…...
docker部署WeDataSphere开源大数据平台
GitHub:https://github.com/WeBankFinTech/WeDataSphere **WDS容器化版本是由Docker构建的一个能够让用户在半小时内完成所有组件安装部署并使用的镜像包。**无需再去部署Hadoop等基础组件,也不需要部署WDS的各功能组件,即可让您快速体验 WD…...
【计算机视觉】OpenCV项目实战:基于face_recognition库的实时人脸识别系统深度解析
基于face_recognition库的实时人脸识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 人脸检测模块2.2 特征编码2.3 相似度计算 3. 实战部署指南3.1 环境配置3.2 数据准备3.3 实时识别流程 4. 常见问题与解决方案4.1 dlib安装失败4.2 人脸检测性能差4.3 误识别率高 5. 关键…...
uni-app学习笔记五-vue3响应式基础
一.使用ref定义响应式变量 在组合式 API 中,推荐使用 ref() 函数来声明响应式状态,ref() 接收参数,并将其包裹在一个带有 .value 属性的 ref 对象中返回 示例代码: <template> <view>{{ num1 }}</view><vi…...