C++:类和对象(二)
目录
const成员函数
1. 基本语法
2. const 成员函数的作用
(1) 保证对象不被修改
(2) 提高代码安全性
(3) 支持 const 对象
3. 示例
(1) 基本用法
(2) const 对象只能调用 const 成员函数
(3) mutable 成员变量
4. const 成员函数的重载
初始化列表
基本语法
为什么使用初始化列表
使用示例
注意事项
友元函数
一、友元函数的基本概念
1.1 什么是友元函数?
1.2 友元函数的特点
二、友元函数的声明与定义
2.1 声明友元函数
2.2 定义友元函数
三、友元函数的常见用途
运算符重载
static成员
static成员变量
声明和定义
使用示例
static成员函数
声明和定义
使用示例
注意事项
类型转换
const成员函数
在 C++ 中,const
成员函数 是一种特殊的成员函数,它承诺 不会修改 调用它的对象的状态(即不会修改类的成员变量)。const
成员函数的声明方式是在函数参数列表后加上 const
关键字。
1. 基本语法
class MyClass {
public:void nonConstFunc(); // 普通成员函数(可以修改成员变量)void constFunc() const; // const 成员函数(不能修改成员变量)
};
-
const
成员函数 不能修改类的非mutable
成员变量。 -
非
const
成员函数 可以修改成员变量。
const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改,const休息Date类的Print成员函数,Print隐含的this指针由 Date * const this 变为 const Date * const this
class Date
{
public:
Date(int year = 1, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
// void Print(const Date* const this) const
void Print() const
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
2. const
成员函数的作用
(1) 保证对象不被修改
-
如果一个对象被声明为
const
(如const MyClass obj;
),则只能调用它的const
成员函数。 -
如果尝试调用非
const
成员函数,编译器会报错。
(2) 提高代码安全性
-
防止函数意外修改对象状态。
-
使代码更清晰,明确哪些函数会修改对象,哪些不会。
(3) 支持 const
对象
-
如果一个对象是
const
的,只有const
成员函数可以被调用。
3. 示例
(1) 基本用法
#include <iostream>
using namespace std;class Counter {
private:int count;
public:Counter() : count(0) {}// 普通成员函数(可以修改成员变量)void increment() {count++;}// const 成员函数(不能修改成员变量)int getCount() const {// count++; // 错误!不能在 const 函数里修改成员变量return count;}
};int main() {Counter c1;c1.increment(); // 可以调用非 const 函数cout << c1.getCount() << endl; // 可以调用 const 函数const Counter c2;// c2.increment(); // 错误!不能对 const 对象调用非 const 函数cout << c2.getCount() << endl; // 可以调用 const 函数return 0;
}
(2) const
对象只能调用 const
成员函数
const Counter c;
c.increment(); // 错误!不能调用非 const 函数
c.getCount(); // 可以调用 const 函数
(3) mutable
成员变量
如果某个成员变量被声明为 mutable
,即使在 const
成员函数中也可以修改它。
class Logger {
private:mutable int logCount; // 可变的,即使在 const 函数里也能修改
public:void log() const {logCount++; // 允许修改,因为 logCount 是 mutable}
};
4. const
成员函数的重载
可以同时提供 const
和非 const
版本的成员函数,编译器会根据调用对象的 const
性质选择合适的版本。
class Data {
private:int value;
public:int& getValue() { // 非 const 版本(返回可修改的引用)return value;}const int& getValue() const { // const 版本(返回只读的引用)return value;}
};int main() {Data d1;const Data d2;d1.getValue() = 10; // 调用非 const 版本,可以修改// d2.getValue() = 20; // 错误!调用 const 版本,不能修改cout << d2.getValue(); // 可以读取return 0;
}
初始化列表
初始化列表(Initializer List)是 C++ 中用于初始化类成员的一种特殊语法,它在构造函数体执行之前完成成员的初始化。
基本语法
class MyClass {
public:// 初始化列表语法MyClass(int a, double b) : memberA(a), memberB(b) {// 构造函数体}private:int memberA;double memberB;
};
为什么使用初始化列表
-
效率更高:对于类类型成员,使用初始化列表直接调用拷贝构造函数,而在构造函数体内赋值则是先调用默认构造函数再调用赋值运算符。
-
必须使用的情况:
-
初始化 const 成员
-
初始化引用成员
-
初始化没有默认构造函数的类成员
-
使用示例
class Example {
public:// 必须使用初始化列表的情况Example(int &ref, int val) : refMember(ref), constMember(val) {// 构造函数体}// 初始化顺序示例Example(int a, int b) : memberB(a), memberA(b) {// 注意:初始化顺序取决于成员声明顺序,而非初始化列表中的顺序}private:int memberA;int memberB;int &refMember; // 引用成员const int constMember; // const成员
};
注意事项
-
初始化顺序:成员的初始化顺序与它们在类中声明的顺序一致,与初始化列表中的顺序无关。
-
性能考虑:对于内置类型(int, double等),使用初始化列表或在构造函数体内赋值性能差异不大,但对于类类型,初始化列表通常更高效。
-
默认参数:初始化列表可以与默认参数结合使用。
友元函数
一、友元函数的基本概念
友元分为友元类和友元函数
友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
1.1 什么是友元函数?
友元函数(friend function)是一个被类声明为"朋友"的非成员函数,它可以访问该类的所有私有和保护成员,就像成员函数一样。友元函数不属于类的成员,但它被授予了访问类私有部分的特权。
class Box {
private:double width;public:Box(double w) : width(w) {}// 声明友元函数friend void printWidth(const Box& box);
};// 友元函数定义
void printWidth(const Box& box) {// 可以访问Box的私有成员widthstd::cout << "Width: " << box.width << std::endl;
}
1.2 友元函数的特点
-
非成员性:友元函数不是类的成员函数
-
特权访问:可以访问类的私有和保护成员
-
单向性:友元关系是单向的,类A声明函数f为友元,不意味着f是类A的成员
-
非传递性:友元关系不传递,A是B的友元,B是C的友元,不意味着A是C的友元
-
非继承性:友元关系不继承,基类的友元不是派生类的友元
二、友元函数的声明与定义
2.1 声明友元函数
友元函数在类内部声明,使用friend
关键字:
class MyClass {
private:int secret;public:MyClass(int s) : secret(s) {}// 声明普通函数为友元friend void showSecret(const MyClass& obj);// 声明其他类的成员函数为友元friend void OtherClass::accessMyClass(const MyClass& obj);
};
2.2 定义友元函数
友元函数的定义与普通函数相同,不需要使用friend
关键字,但是它定义在类外面。
void showSecret(const MyClass& obj) {std::cout << "Secret is: " << obj.secret << std::endl;
}
三、友元函数的常见用途
运算符重载
友元函数常用于重载运算符,特别是当运算符的第一个操作数不是类对象时:
class Complex {
private:double real, imag;public:Complex(double r = 0, double i = 0) : real(r), imag(i) {}// 重载<<运算符为友元函数friend std::ostream& operator<<(std::ostream& os, const Complex& c);// 重载+运算符为友元函数friend Complex operator+(const Complex& c1, const Complex& c2);
};std::ostream& operator<<(std::ostream& os, const Complex& c) {os << c.real << " + " << c.imag << "i";return os;
}Complex operator+(const Complex& c1, const Complex& c2) {return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
static成员
在C++中,static
关键字用于类的成员时,有特殊的含义和作用。static成员分为static成员变量和static成员函数。
static成员变量
static成员变量是属于类本身的,而不是类的某个特定对象。这意味着:
-
类所有对象共享:所有类的对象共享同一个static成员变量
-
独立于对象存在:即使没有创建类的任何对象,static成员变量也存在
-
存储位置:存储在全局数据区,而不是对象的存储空间中
-
静态成员也是类的成员,受public、protected、private访问限定符的限制
声明和定义
class MyClass {
public:static int count; // 声明static成员变量
};int MyClass::count = 0; // 定义并初始化static成员变量(必须在类外)
使用示例
#include <iostream>
using namespace std;class Counter {
public:static int count; // 声明Counter() {count++;}~Counter() {count--;}
};int Counter::count = 0; // 定义并初始化int main() {cout << "Initial count: " << Counter::count << endl;Counter c1;cout << "After c1: " << Counter::count << endl;{Counter c2;cout << "After c2: " << Counter::count << endl;}cout << "After c2 destroyed: " << Counter::count << endl;return 0;
}
static成员函数
static成员函数也是属于类而非特定对象的,具有以下特点:
-
只能访问static成员:不能直接访问类的非static成员变量或成员函数
-
没有this指针:因为没有绑定到特定对象
-
可通过类名直接调用:不需要通过对象实例调用
声明和定义
class MyClass {
public:static void staticFunc(); // 声明
};void MyClass::staticFunc() { // 定义// 实现代码
}
使用示例
#include <iostream>
using namespace std;class MathUtility {
public:static int add(int a, int b) {return a + b;}static int subtract(int a, int b) {return a - b;}
};int main() {cout << "5 + 3 = " << MathUtility::add(5, 3) << endl;cout << "5 - 3 = " << MathUtility::subtract(5, 3) << endl;return 0;
}
注意事项
-
static成员变量必须在类外定义和初始化(C++17引入了inline static可以在类内初始化)
-
static成员函数不能是const或volatile的
-
static成员函数不能被声明为virtual
-
static成员可以被继承,但遵循常规的访问控制规则
-
静态成员变量不能在生命位置给缺省值初始化,因为缺省值是给构造函数初始化列表的,静态成员变量不属于某个对象,不走构造函数初始化列表。
类型转换
C++支持内置类型隐式类型转换为类类型对象,需要有相关内置内省为参数的构造函数
构造函数前面加explicit就不再支持隐式类型转换
类类型的对象之间也可以隐式转换,需要相应的构造函数支持
相关文章:
C++:类和对象(二)
目录 const成员函数 1. 基本语法 2. const 成员函数的作用 (1) 保证对象不被修改 (2) 提高代码安全性 (3) 支持 const 对象 3. 示例 (1) 基本用法 (2) const 对象只能调用 const 成员函数 (3) mutable 成员变量 4. const 成员函数的重载 初始化列表 基本语法 为什…...
【Django】教程-2-前端-目录结构介绍
【Django】教程-1-安装创建项目目录结构介绍 3. 前端文件配置 3.1 目录介绍 在app下创建static文件夹, 是根据setting中的配置来的 STATIC_URL ‘static/’ templates目录,编写HTML模板(含有模板语法,继承,{% static ‘xx’ …...
2025年渗透测试面试题总结-某快手-安全工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 快手-安全工程师 一、Linux提权技术:Dirty Cow漏洞深度解析 1.1 漏洞技术原理 1.2 漏洞影…...
数据结构之栈
目录 1 简介 2 栈的基本概念 3 代码实现 4 代码解析(部分) 4.1 初始化栈 4.2 入栈 4.3 出栈 4.4 只读获取栈顶元素(peek) 4.5 判断是否为空 4.6 获取栈大小 4.7 十进制转换为二进制 5 核心操作分析 6 总结 1 简介 栈…...
【AndroidRTC-10】webrtc是如何确定双端的编解码类型?
Android-RTC系列软重启,改变以往细读源代码的方式 改为 带上实际问题分析代码。增加实用性,方便形成肌肉记忆。同时不分种类、不分难易程度,在线征集问题切入点。 问题:webrtc-android是如何确定编解码类型,如何调整视…...
深度求索(DeepSeek):以AI之力重塑医疗未来
目录 一、智能诊断:打破医疗认知的“分辨率极限” 二、药物研发:重构分子世界的“造物逻辑” 三、医疗资源重构:打造分级诊疗的“神经中枢” 四、健康管理:编织个体化医学的“防护网” 五、伦理与进化:构建医疗AI…...
【HTML 基础教程】HTML 属性
HTML 属性 属性是 HTML 元素提供的附加信息。 属性通常出现在 HTML 标签的开始标签中,用于定义元素的行为、样式、内容或其他特性。 属性总是以 name"value" 的形式写在标签内,name 是属性的名称,value 是属性的值。 HTML 属性 …...
macOS 制作dmg磁盘映像安装包
制作dmg磁盘影像安装包需要准备一下材料: 1. 导出的APP 2. 背景图片 3. 应用程序替身 前两种材料很容易得到。 下面介绍一下 应用程序替身制作过程: Finder —> 选中 应用程序 --> 找到顶部菜单栏中 的 前往 ----> 选择上层文件夹选中应用程…...
Appium中元素定位之一组元素定位API
应用场景 和定位一个元素相同,但如果想要批量的获取某个相同特征的元素,使用定位一组元素的方式更加方便 在 Appium 中定位一组元素的 API 与定位单个元素的 API 类似,但它们返回的是一个元素列表(List<MobileElement>&am…...
webstorm中element-ui标签无法跳转源码
原本用的webstorm2019,之前的项目开发时切实体验过跳转element-ui源码,觉得很香。 更新了webstorm至2024,居然不行了,能弹出来提示,但就是找不到定义。 不知道是不是2024版本的问题,node_moudles不管我是否手动添加exc…...
【蓝桥杯】算法笔记1
1.暴力枚举 给定一个正整数n,请找出所有满足a + b = n的整数对(a, b),其中a和b都是正整数,且a ≤ b。 输入格式:一个正整数n (1 ≤ n ≤ 10⁶) 输出格式:所有符合条件的(a, b)对,每行一对,按a的升序排列。如果没有符合条件的对,输出"No solution"。 问题分…...
Pytorch学习笔记(十一)Learning PyTorch - What is torch.nn really
这篇博客瞄准的是 pytorch 官方教程中 Learning PyTorch 章节的 What is torch.nn really? 部分。主要是教你如何一步一步将最原始的代码进行重构至pytorch标准的代码,如果你已经熟悉了如何使用原始代码以及pytorch标准形式构建模型,可以跳过这一篇。 …...
OpenGL ES 2.0与OpenGL ES 3.1的区别
如果硬件支持且需要更高质量的图形效果,推荐3.1;如果兼容性和开发简便更重要,且效果需求不高,2.0更合适。不过现代车载系统可能越来越多支持3.x版本,所以可能倾向于使用3.1,但具体情况还需调查目标平台的硬…...
【Unity3D脚本与系统设计6】鼠标触摸超时待机实现
实现步骤 在Unity中实现一个功能,当鼠标或触摸超过一定时间没有操作时,自动返回待机界面。 检测输入 首先,我需要检测用户的输入,无论是鼠标还是触摸。Unity的Input系统可以检测到鼠标和触摸事件,比如Input.GetAxis…...
SpringMVC 入门教程
一、SpringMVC 简介 SpringMVC 是基于 MVC 设计模式的轻量级 Web 框架,核心功能包括: 请求分发:通过 DispatcherServlet 统一处理请求。注解驱动:使用 Controller、RequestMapping 简化开发。视图解析:支持 JSP、Thy…...
矿山自动化监测解决方案
1.行业现状 为贯彻落实《中共中央国务院关于推进安全生产领域改革发展的意见》《“十四五”矿山安全生产规划》(应急〔2022〕64号)、《国务院安委会办公室关于加强矿山安全生产工作的紧急通知》(安委办〔2021〕3号)等有关工作部署…...
el-table + el-pagination 前端实现分页操作
el-table el-pagination 前端实现分页操作 后端返回全部列表数据,前端进行分页操作 html代码 <div><el-table :data"tableData" border><el-table-column label"序号" type"index" width"50" /><el…...
NIO ByteBuffer 总结
目录 基本概念创建 ByteBuffer核心属性关键方法切换模式读写操作压缩数据 基本概念 java.nio.ByteBuffer 是 Java NIO 中一个核心类, 用于高效处理二进制数据的读写操作。应用于通道(Channel)的I/O操作。作用: 数据缓冲…...
华为hcia——Datacom实验指南——配置IPv4静态路由,默认路由和浮动静态路由
什么是IPv4 IPv4静态路由,是手动配置的,不会随着网络拓扑的变化而变化,所配置的路由信息也不会在网络中传播,所以它主要运用在小型网络或者作为动态路由的补充。 IPv4的配置 配置的命令很简单 IP route-static (目…...
Git入门——常用指令汇总
以下是一份精心整理的 Git常用指令速查表,基本覆盖日常开发使用场景,建议收藏备用👇 🔧 环境配置 指令作用git config --global user.name "你的名字"设置全局用户名git config --global user.email "你的邮箱&qu…...
深入解析 MyBatis-Plus 批量操作:原理、实现与性能优化
引言 在高并发、大数据量场景下,批量数据库操作是提升系统性能的核心手段之一。本文以 MyBatis-Plus 为例,深入剖析 批量更新 和 自定义批量插入 的实现原理,并结合实战代码与性能测试,揭示其在高性能场景下的应用价值。 批量更新:动态 SQL 的极致运用 原理与 SQL 生成…...
2025年成都市双流区农业科技试验示范基地建设方案申报条件材料和补贴程序、时间安排
成都市双流区2025年农业科技试验示范基地建设方案申报条件材料和补贴程序、时间安排如下,需要申报的可指导! 一、成都市双流区农业科技试验示范基地申报 (一)基地建设数量。2025年建设农业科技试验示范基地2个。 (二…...
8路CXP相机采集系统介绍
8xCXP相机采集系统介绍 目录 1 系统概述 4 2 硬件架构 5 2.1 FPGA处理单元 5 2.2 CXP接口层 6 2.3 CXP相机说明与使用要求 7 2.4 SSI控制器板 8 3 FPGA方案 9 3.1 FPGA实现 9 3.2 Block Design说明 10 4 软件方案 14 4.1 嵌入式层 14 4.2 上位机软件(C…...
vue2前端日志数据存储,推荐(IndexedDB)
前言:首先,我得回忆一下IndexedDB的基本概念和用法,确保自己理解正确。IndexedDB是一个浏览器内置的数据库,允许存储大量结构化数据,支持事务和索引查询,适合需要离线存储的应用场景。 接下来,用…...
onedav一为导航批量自动化导入网址(完整教程)
OneNav作为一个功能强大的导航工具,支持后台管理、加密链接、浏览器书签批量导入等功能,能够帮助用户轻松打造专属的导航页面。今天,我将为大家详细介绍如何实现OneNav导航站的批量自动化导入网址。 1、建立要批量导入的表格 格局需要创建表格,表格的要求是一定要有需要,…...
Ubuntu Linux安装PyQt5并配置Qt Designer
一 安装 PyQt5 借助 apt 包管理器来安装 PyQt5 及其相关的开发工具: sudo apt install python3-pyqt5 pyqt5-dev-tools 假如报错, You might want to run apt --fix-broken install to correct these. 直接执行: sudo apt --fix-…...
无人机螺旋桨平衡标准
螺旋桨平衡是确保无人机(UAV)平稳运行、可靠性和使用寿命的关键过程。螺旋桨的不平衡会导致振动、噪音,并加速关键部件的磨损,从而对飞行性能产生负面影响。 ISO 21940-11:2016标准为旋翼平衡提供了一个广泛引用的框架,定义了可接受的不平衡…...
基于MCP协议的多模态模型优化在医疗3D打印精密人工关节制造中的研究
一、引言 1.1 研究背景与意义 在全球人口老龄化趋势愈发明显的当下,诸如骨关节炎、类风湿性关节炎这类关节疾病的发病率不断攀升,进而使得人工关节置换手术的需求呈现出激增态势。人工关节置换手术作为治疗终末期关节疾病的有效手段,能够显著缓解患者疼痛,提升关节功能与生…...
ESLint报错:Could not find config file.
如果你的ESLint的版本大于 8,同时使用 .eslinrc.js 和 .eslintignore 作为配置文件,且目前用的是 VSCODE ,就有可能遇到报错: Could not find config file. 这个是因为 VSCode 中 ESLint 插件的配置 eslint.useFlatConfig 的问题…...
npm install 卡在创建项目:sill idealTree buildDeps
参考: https://blog.csdn.net/PengXing_Huang/article/details/136460133 或者再执行 npm install -g cnpm --registryhttps://registry.npm.taobao.org 或者换梯子...
drizzleDumper:基于内存搜索的Android脱壳工具
一、工具介绍 drizzleDumper 是一款基于内存搜索的 Android 脱壳工具,主要用于从加固的 Android 应用程序中提取原始的 DEX 文件。它通过分析应用程序运行时的内存,定位并提取被加固的 DEX 文件,从而帮助开发者、安全研究人员进行逆向工程和…...
信号处理中的窗
窗函数(Window Function)是一种在信号处理中常用的工具,用于对信号进行截断和加权处理。它在频谱分析、滤波器设计以及信号处理的许多其他领域中都发挥着重要作用。 窗函数的基本概念 窗函数本质上是一个有限长度的序列,通常用于…...
FFmpeg学习:AVPacket结构体
1.AVPacket结构体 FFmpeg中用于封装一帧的编码数据的结构体(比如H264视频帧或者AAC音频帧),主要用于编解码过程中数据的载体,使用av_read_frame()读取获得,或者使用avcodec_send_packet()进行解码,与AVFra…...
34.[前端开发-JavaScript基础]Day11-王者轮播图-书籍购物车-BOM对象-JSON
1 认识BOM操作 认识BOM 2 全局对象window window对象 window对象的作用 window常见的属性 window常见的方法 3 事件对象event window常见的事件 4 location、history location对象常见的属性 Location对象常见的方法 URLSearchParams history对象常见属性和方法 5 navigato…...
FLEXlm如何通过web调用
FLEXlm 是一种流行的软件许可管理工具,广泛用于各种软件产品的授权管理。它支持多种协议,包括传统的服务器-客户端模式和一些基于网络的解决方案。如果你想通过 Web 接口调用 FLEXlm 许可证服务器,你可以通过以下几种方式实现: 使…...
深度解析Spring Boot可执行JAR的构建与启动机制
一、Spring Boot应用打包架构演进 1.1 传统JAR包与Fat JAR对比 传统Java应用的JAR包在依赖管理上存在明显短板,依赖项需要单独配置classpath。Spring Boot创新的Fat JAR(又称Uber JAR)解决方案通过spring-boot-maven-plugin插件实现了"…...
Zookeeper运维指南:服务端与客户端常用命令详解
#作者:任少近 文章目录 1 Zookeeper服务端常用命令2 Zookeeper客户端常用命令2.1Ls命令2.2创建节点create2.3Get命令2.4删除命令2.5修改命令 1 Zookeeper服务端常用命令 启动ZK服务: bin/zkServer.sh start # ./zkServer.sh startZooKeeper JMX enabled by defau…...
K8S学习之基础五十一:k8s部署jenkins
k8s部署jenkins 创建nfs共享目录, mkdir -p /data/v2 echo /data/v2 *(rw,no_root_squash) > /etc/exports exportfs -arv创建pv、pvc vi pv.yaml apiVersion: v1 kind: PersistentVolume metadata:name: jenkins-k8s-pv spec:capacity:storage: 1GiaccessMod…...
界面控件DevExpress WinForms v25.1 - 人工智能(AI)方面全新升级
DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…...
基于动态光影融合的缺陷实时检测和材质量化方法,并且整合EventPS、VMNer和EvDiG
要完成基于动态光影融合的缺陷实时检测和材质量化方法,并且整合EventPS、VMNer和EvDiG,是一个复杂且综合性的任务。以下是一个大致的实现步骤和代码示例,不过要完整完成论文和所有实验还需要大量的细化和调整。 整体思路 数据加载与预处理&…...
关于我对接了deepseek之后部署到本地将数据存储到mysql的过程
写在前面 今天写一下使用nodejs作为服务端,vue作为客户端,mysql的数据库,对接deepseek的全过程,要实现一个很简单的效果就是,可以自由的询问,然后可以将询问的过程存储到mysql的数据库中。 文档对接 deeps…...
Android 中两个 APK 之间切换的几中方法
在 Android 中,两个 APK(应用程序)之间的切换通常是通过 Intent 来实现的。以下是一些常见的方法和注意事项,帮助你实现两个 APK 之间的切换。 一、启动目标 APK 的主 Activity 1、setPackage 方法 使用 Intent 的 setPackage …...
【LeetCode 热题 100】解答汇总
一、哈希表 1. 两数之和 | python【简单】 49. 字母异位词分组 | python【中等】 128. 最长连续序列 | python【中等】 二、双指针 283. 移动零 | python【简单】 盛最多水的容器 三数之和 接雨水 三、滑动窗口 3. 无重复字符的最长子串 | python 【中等】 49. 字母异…...
【RAG综述系列】之 RAG 相关背景和基本原理
系列文章: 【RAG综述系列】之 RAG 相关背景和基本原理 【RAG综述系列】之 RAG 特点与挑战以及方法与评估 【RAG综述系列】之 RAG 先进方法与综合评估 【RAG综述系列】之 RAG 应用和未来方向 正文: 检索增强生成(Retrieval-Augmented Gen…...
Unity 开发休闲手游:M_Studio 实战指南,源码课件全解析
Unity 开发休闲手游:M_Studio 实战指南,源码课件全解析 在手游开发领域,Unity 引擎凭借其强大的跨平台能力和丰富的资源,成为众多开发者的首选。今天,我们深入探讨如何利用 Unity 开发休闲手机游戏,以 M_S…...
HTML5 新的 Input 类型学习笔记
HTML5 引入了多种新的表单输入类型,这些新特性不仅增强了输入控制,还提供了更强大的验证功能,使表单设计更加灵活和便捷。以下是 HTML5 新的 Input 类型的详细学习笔记。 一、color 类型 功能:用于选取颜色。 使用场景ÿ…...
【第23节】windows网络编程模型(WSAEventSelect模型)
目录 引言 一、WSAEventSelect模型概述 二、 WSAEventSelect模型的实现流程 2.1 创建一个事件对象,注册网络事件 2.2 等待网络事件发生 2.3 获取网络事件 2.4 手动设置信号量和释放资源 三、 WSAEventSelect模型伪代码示例 四、完整实践示例代码 引言 在网…...
C# 中实现 跨线程写入
方案核心思路 写入请求队列:使用 ConcurrentQueue 接收来自任意线程的写入请求。 专用写入线程:由独立线程处理队列中的写入操作,确保顺序执行。 双信号机制:通过 ManualResetEventSlim 控制读取线程的暂停与恢复。 线程安全确…...
联合体(Union)的使用与应用场景
引言 在 C/C++ 编程中,联合体(Union)是一个非常独特的数据结构。与结构体(struct)不同,联合体允许不同的数据类型共享同一块内存空间,从而节省内存。在许多需要高效内存管理的场景下,联合体的使用能够显著提高程序的性能与资源利用率。本文将从联合体的基本概念入手,…...
Spark2 之 Expression/Functions
ExpressionConverter src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala TopNTransformer src/main/scala/org/apache/gluten/execution/TopNTransformer.scala...