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

堆(heap)

堆?对于初学者来说,或许是一个陌生十足的概念。

但!堆不可怕。

什么是堆?

学术上,常常是这样说的(一个完全二叉树)。

没毛病,要想更好的理解堆(heap),确实需要好好掌握二叉树

但,不熟也没关系,只要掌握线性数组也能OK。

通俗的说,堆(完全二叉树),其形状类似现实中的 "堆" (如沙堆、书堆):

  • 父节点在上,子节点在下。层次分明,如同物品层层堆叠。
  • 最大堆/最小堆的性质,就是(父节点>=子节点 | 父节点<=子节点),使得其像树一样。

堆在逻辑上的操作

  • 插入元素:将新元素放置在堆底,然后逐层向上调整(“向上冒泡”),保持堆的性质。
  • 删除节点:将堆顶元素删除,然后将堆底元素移动到堆顶,在逐层向下调整(“向下沉底”),重新堆化。

由上图,经过观察可以发现(如:2的子节点为4和5)
总结出:在二叉树中,若当前节点的下标为 i, 则其父节点的下标为 i/2,其左子节点的下标为 i*2,其右子节点的下标为i*2+1;

最大堆:

最大堆,意思是根节点最大,往往又叫做大根堆

  • 最大堆:所有父节点的值 >= 子节点的值。

就像如图所示,完全二叉数,可以转化为数组。从而实现最大堆。

初始化最大堆的代码:
  1. 定义最大堆结构体,包含指向堆数组的指针、当前元素数量和最大容量。
  2. get_maxHeap函数中,从最后一个非叶子节点开始,对每个非叶子节点进行调整。
  3. 对于每个非叶子节点,保存其值,找到左子节点。
  4. 若右子节点存在且值更大,选择右子节点。
  5. 若当前节点值小于子节点值,将子节点值上移,继续向下调整。
  6. 找到合适位置后,将保存的值放入。

代码确实晦涩难懂些,但是跟着注释敲一遍,就确切的明白了

#include <iostream>
using namespace std;// 定义最大堆结构体
struct MaxHeap {int *heap; // 指向堆数组的指针int size;  // 当前堆中元素的数量int MaxSize; // 堆数组的最大容量
};// 初始化最大堆
void get_maxHeap(MaxHeap& maxHeap) {// 从最后一个非叶子节点开始调整堆for (int i = maxHeap.size / 2; i >= 1; i--) {int temp = maxHeap.heap[i]; // 保存当前要调整的节点的值int child = i * 2; // 找到当前节点的左子节点// 向下调整节点,直到找到合适的位置while (child <= maxHeap.size) {// 如果右子节点存在且右子节点的值更大,则选择右子节点if (child + 1 <= maxHeap.size && maxHeap.heap[child] < maxHeap.heap[child + 1]) {child++;}// 如果当前节点的值小于子节点的值,则将子节点的值上移if (temp < maxHeap.heap[child]) {maxHeap.heap[child / 2] = maxHeap.heap[child];child = child * 2; // 继续向下调整} else {break; // 找到合适的位置,退出循环}}// 将保存的节点值放入合适的位置maxHeap.heap[child / 2] = temp;}
}int main() {int heap[10] = {0, 3, 5, 6, 2, 2}; // 堆数组,下标从 1 开始MaxHeap mh;mh.heap = heap;mh.MaxSize = 10;mh.size = 5;get_maxHeap(mh); // 初始化最大堆// 输出最大堆中的元素for (int i = 1; i <= mh.size; ++i) {cout << mh.heap[i] << " ";}cout << endl;return 0;
}

本题的如下图一样变化 

        (3)/   \(5)   (6)/ \(2) (2)==========================
1、保存节点 3 的值 temp = 3。
2、找到左子节点 5 和右子节点 6,选择较大的子节点 6。
3、将 6 上移到根节点位置,3 下移到 6 的位置。
==========================(6)/   \(5)   (3)/ \(2) (2)
最大堆插入节点

最大堆的插入节点的思想就是先在堆的最后添加一个节点,然后沿着堆树上升。跟最大堆的初始化过程大致相同。

// 向最大堆中插入元素
void insert(MaxHeap& maxHeap, int val) {if (maxHeap.size == maxHeap.MaxSize) return; // 堆已满,直接返回// 先将新元素放到堆的末尾maxHeap.heap[++maxHeap.size] = val;int child = maxHeap.size;// 进行上浮操作,将新元素调整到合适的位置while (child > 1 && maxHeap.heap[child / 2] < val) {maxHeap.heap[child] = maxHeap.heap[child / 2];child = child / 2;}// 将新元素放到最终合适的位置maxHeap.heap[child] = val;
}
删除根节点
// 删除最大堆的根节点(最大值)
int deleteMax(MaxHeap& maxHeap) {if (maxHeap.size == 0) {cout << "Heap is empty!" << endl;return -1; // 表示堆为空}int maxVal = maxHeap.heap[1]; // 保存根节点的值maxHeap.heap[1] = maxHeap.heap[maxHeap.size]; // 将最后一个节点移到根节点位置maxHeap.size--; // 堆的大小减 1int i = 1; // 从根节点开始向下调整while (true) {int leftChild = 2 * i;int rightChild = 2 * i + 1;int largest = i;// 找出当前节点、左子节点和右子节点中的最大值if (leftChild <= maxHeap.size && maxHeap.heap[leftChild] > maxHeap.heap[largest]) {largest = leftChild;}if (rightChild <= maxHeap.size && maxHeap.heap[rightChild] > maxHeap.heap[largest]) {largest = rightChild;}// 如果最大值不是当前节点,则交换并继续向下调整if (largest != i) {swap(maxHeap.heap[i], maxHeap.heap[largest]);i = largest;} else {break; // 已经满足最大堆性质,退出循环}}return maxVal;
}

最小堆

最小堆,就不必咱多说了,

Ψ( ̄∀ ̄)Ψ,就是简单的,将最大堆的操作反过来。

几种高效的排序总结:

堆排序

复杂度分析

  • 时间复杂度:O(n),其中 n 是堆中元素的数量。
  • 空间复杂度:O(1),只使用了常数级的额外空间。

将一整个数组排序的话

  • 原理:利用堆这种数据结构,首先将数组构建成一个最大堆,然后依次将堆顶元素(最大值)与堆的最后一个元素交换,并调整堆,直到整个数组有序。
  • 时间复杂度:无论数组初始状态如何,都需要进行 O(nlogn) 次比较和调整操作,时间复杂度始终为 O(nlogn)。
归并排序
  • 原理:采用分治法,将数组分成两个子数组,分别对两个子数组进行排序,然后将排好序的子数组合并成一个最终的有序数组。
  • 时间复杂度:无论数组初始状态如何,都需要进行 O(nlogn) 次比较和合并操作,时间复杂度始终为 O(nlogn)。
快速排序
  • 原理:选择一个基准值,将数组分为两部分,使得左边部分的元素都小于等于基准值,右边部分的元素都大于等于基准值,然后分别对左右两部分递归地进行排序。
  • 时间复杂度
    • 最坏情况:每次选择的基准值都是最大或最小的元素,时间复杂度为 O(n2)。
    • 最好情况:每次选择的基准值都能将数组均匀地分成两部分,时间复杂度为 O(nlogn)。
    • 平均情况:时间复杂度为 O(nlogn)。

截断提升 :: 基础巩固 ::

截断提升,不是一个词语,它由两部分组成。

在C++中,截断(Truncation)和提升(Promotion)是在不同的类型转换时,才会发生。

一、类型提升(Promotion):为精度而生

为了增加数字计算的精确性。自动将较小的数据类型转换为较大类型的过程。

char c = 'A'; // ASCII值为65
int result = c + 10; // c被提升为int,结果为75

如char类型运算时,会把char类型隐式转换为int类型。

二、类型截断(Truncation):数据丢失的风险

计算机内部,进行计算时,通常采用二进制进行计算。

数字之间储存也采用二进制储存。

如果将int类型强转为char类型,会把4位字节,截断成1位字节。

这也就意味着,强转之后,可能出现负数。

int num = 300;
char c = static_cast<char>(num); // 300的二进制为 100101100,截断后保留低8位 00101100,即十进制44
三、负数原码与补码(转换)

负数-> 原码取反+1

补码-> 取反+1

===>补码的补码 叫原码;( ̄︶ ̄)↗ 


借鉴博客:

1、堆的基本储存

2、数据结构堆(Heap)详解-堆的建立、插入、删除、最大堆、最小堆、堆排序等

....


相关文章:

堆(heap)

堆&#xff1f;对于初学者来说&#xff0c;或许是一个陌生十足的概念。 但&#xff01;堆不可怕。 什么是堆&#xff1f; 学术上&#xff0c;常常是这样说的&#xff08;一个完全二叉树&#xff09;。 没毛病&#xff0c;要想更好的理解堆(heap)&#xff0c;确实需要好好掌…...

Leetcode-回溯-组合型

22. 括号生成 - 力扣&#xff08;LeetCode&#xff09; 这题并没有才有恢复现场的做法 而是直接覆盖 题目核心是看穿本质 在代码执行过程中左括号必须大于等于右括号 以及回溯最底层的递归条件是递归长度已经达到2n 还有做括号要小于n 又因为i左右 因此右等于i-左 ope…...

Modbus通信协议基础知识总结

1. 数据类型与存储区分类 Modbus协议将数据分为四类存储区&#xff0c;通过存储区代号区分&#xff1a; 输出线圈&#xff08;0x&#xff09;&#xff1a;可读写&#xff0c;对应二进制开关量&#xff08;如继电器状态&#xff09;&#xff0c;地址范围000001-065536&#xff…...

python pip 最最开始新手教程/pip安装jupyter

pip 安装 直接安排了python即安装了pip,一般找pip的是安装了python之后用不了的&#xff0c;出现问题的&#xff0c;我也是因为这个所以写了这篇文章。 一、找不到pip,在C盘的cmd 输入pip -- version显示没有的是因为pip不能直接使用&#xff0c;需要额外配置环境变量 在系统…...

MATLAB 控制系统设计与仿真 - 28

MATLAB状态空间控制系统分析 - 极点配置 就受控系统的控制律的设计而言,由状态反馈极点配置和输出反馈极点配置。 状态反馈极点配置问题就是:通过状态反馈矩阵K的选取,使闭环系统的极点,即(A-BK)的特征值恰好处于所希望的一组给定闭环极点的位置。 另外,线性定常系统可…...

[leetcode] 面试经典 150 题——篇3:滑动窗口

[leetcode] 面试经典 150 题——篇3&#xff1a;滑动窗口 方法概述基本原理适用场景示例说明 1. [中等] 长度最小的子数组(leetcode 209题)题目描述解题思路python代码 2. [中等] 无重复字符的最长子串(leetcode 5题)题目描述解题思路python代码 方法概述 滑动窗口是一种常用的…...

华为云虚拟化技术

‌华为云底层的虚拟化技术‌是一种将物理资源&#xff08;如服务器、存储设备和网络&#xff09;抽象成虚拟资源的技术。通过这种技术&#xff0c;用户可以将物理资源划分为多个虚拟资源&#xff0c;从而提高资源利用率和灵活性‌1。 华为云底层虚拟化的定义和作用 华为云底层…...

在Pycharm配置conda虚拟环境的Python解释器

〇、前言 今天在配置python解释器时遇到了这样的问题 经过一下午自行摸索、上网搜寻后&#xff0c;终于找到的解决的方案&#xff0c;遂将该方法简要的记录下来&#xff0c;以备后用&#xff0c;并希望能帮助到有同样问题或需求的朋友:) 我所使用的软件的版本如下&#xff0c;假…...

【AI】在AWS AI芯片服务上部署运行Qwen 2.5模型

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 准备选项 1:在 Amazon EC2 Inf2 上部署 TGI选项 2:在 SageMaker 上部署 TGI清理Qwen 2.5 多语言大型语言模型(LLMs) 是一系列预先…...

如何用日事清做研发目标、需求、规划、迭代、Bug、效能、复盘、绩效一站式管理

近年来&#xff0c;受监管环境趋严、盈利模式转型、市场竞争加剧等影响&#xff0c;互联网行业逐步进入深度变革与持续创新阶段。在此过程中&#xff0c;项目进度延期、需求频繁变更、开发流程混乱等痛点问题频发&#xff0c;导致部分互联网企业创新升级的步伐停滞不前。 企业…...

手搓智能音箱——语音识别及调用大模型回应

一、代码概述 此 Python 代码实现了一个语音交互系统&#xff0c;主要功能为监听唤醒词&#xff0c;在唤醒后接收用户语音问题&#xff0c;利用百度语音识别将语音转换为文本&#xff0c;再调用 DeepSeek API 获取智能回复&#xff0c;最后使用文本转语音功能将回复朗读出来。 …...

Docker安装mysql——Linux系统

拉取mysql镜像 docker pull mysql 查看镜像 docker images 运行镜像&#xff08;这一步的作用&#xff1a;数据持久化&#xff0c;通过挂载卷将日志、数据和配置文件存储在主机上&#xff0c;避免容器删除导致数据丢失&#xff09; docker run -p 3306:3306 --name mysql …...

Redis 面试思路

分布式redis面试思路俩点 高性能 高并发 高性能 1.存储在内存 所以速度快 2. 线程模型 io多路复用 监控多个客户端socket 放入队列里面 只是文件分发机制是单线程的 处理队列中的数据 根据不同类型 分发给不同处理器 后面处理的过程 也是多线程的 3. 内存回收机制 定期懒惰 …...

Oracle GoldenGate 全面解析

Oracle GoldenGate 全面解析 Oracle GoldenGate 是一种实时数据集成和复制解决方案,广泛应用于数据同步、数据库迁移、高可用性和灾难恢复等场景。以下将详细解答您提出的关于 Oracle GoldenGate 的一系列问题。 1. Oracle GoldenGate 的架构组成及其核心组件的作用 架构组成…...

【QT:控件】

目录 控件状态&#xff1a;​编辑 geometry : window frame windowlcon: qrc机制 qrc的使用方式&#xff1a; window opacity cursor font: ToolTip focusPolicy: styleSheet: 按钮类控件&#xff1a; PushButton: 给按钮添加图标&#xff1a; 给按钮添加快捷键…...

掌握xtquant:实时行情订阅与数据处理的实战指南

掌握xtquant&#xff1a;实时行情订阅与数据处理的实战指南 &#x1f680;量化软件开通 &#x1f680;量化实战教程 在量化交易领域&#xff0c;实时行情的获取和处理是构建有效交易策略的关键。本文将深入探讨如何使用xtquant库进行实时行情的订阅与数据处理&#xff0c;帮…...

解决 Nginx 访问 /root/下 403 Forbidden 问题

文章目录 解决 Nginx 访问 /root/test/1.html 403 Forbidden 问题问题复现Nginx 配置 可能的原因/root 目录权限问题SELinux 限制 解决方案方案 1&#xff1a;移动文件到 /data/或 /var/www/(推荐方案)方案 2&#xff1a;修改 /root 目录权限&#xff08;不推荐&#xff09;方案…...

免费实用工具,wps/office/永中通吃!

很多小伙伴在使用办公套件的过程中&#xff0c;往往会选择安装一些插件来提高工作效率。在众多的插件中&#xff0c;Excel和Word的插件非常常见&#xff0c;能够帮助用户进行数据分析、文档处理、格式美化等操作。然而&#xff0c;支持PPT&#xff08;PowerPoint&#xff09;的…...

Bash环境定制git分支提示符暨JDK版本切换脚本

一、在Bash提示符中显示Git分支 实现方法 编辑Bash配置文件 打开 ~/.bashrc 文件&#xff0c;添加以下代码&#xff1a; # 显示当前 Git 分支 parse_git_branch() {git branch 2>/dev/null | sed -e /^[^*]/d -e s/* \(.*\)/(\1)/ } export PS1\[\033[01;35m\]$PPX\[\033[0…...

使用fasterwhisper加速

背景 最近申请到一张8卡的gpu 机器用来验证音频转文本&#xff0c;发现whisper的处理速度很慢&#xff0c;于是有了下面的几种验证方法 配置信息 8张A30 第一次尝试 使用whisper对一个95M 的mp4文件进行解码 import time import whisperdef transcribe_audio(audio_path…...

IntelliJ IDEA 调试技巧指南

在日常开发中&#xff0c;调试是不可或缺的一部分。掌握调试工具的使用可以让我们更高效地定位和解决问题。本文将介绍一些在 IntelliJ IDEA 中常用的调试技巧&#xff0c;希望能帮助你在开发过程中更顺畅地解决问题。 1. 方法断点&#xff1a;快速定位实现类 方法断点可以帮…...

蓝桥杯Python赛道备赛——Day5:算术(一)(数学问题)

笔者计划用两期博客对蓝桥杯中所涉及的算术&#xff08;数学问题&#xff09;进行解释&#xff0c;本期博客包括&#xff1a;GCD&#xff08;最大公约数&#xff09;、LCM&#xff08;最小公倍数&#xff09;、质数判断、埃氏筛法、线性筛法&#xff08;欧拉筛&#xff09;和质…...

Android的消息机制

Android的消息机制-从入门到精通 前言Android消息机制概述Android 的消息机制分析ThreadLocal 的工作原理消息队列的工作原理Looper的工作原理Handler的工作原理 主线程的消息循环 前言 作为开发者&#xff0c;提及Android的消息机制&#xff0c;必然绕不开Handler&#xff0c;…...

Three.js 阴影 (Shadow) 知识点整理

阴影主要由 castShadow 和 receiveShadow 控制&#xff0c;并通过不同类型的光源 (DirectionalLight、SpotLight、PointLight) 生成。我们将系统地整理与阴影相关的知识点。 1️⃣ 基础概念 castShadow &#x1f3ad;&#xff1a;物体是否投射阴影。receiveShadow &#x1f3d…...

从C语言开始的C++编程生活(1)

前言 本系列文章承接C语言的学习&#xff0c;需要有C语言的基础才能学会哦。 第1篇主要讲的是有关于C的命名空间、输入和输出。 C才起步&#xff0c;都很简单呢&#xff01; 目录 前言 命名空间namespace 基本语法 作用 使用命名空间 域作用限定符 :: 基本语法 using n…...

【数据库】如何用索引优化查询性能

引言 在数据库查询中&#xff0c;索引是提升性能的关键工具。合理使用索引可以显著减少数据扫描量&#xff0c;加快查询速度。然而&#xff0c;索引的使用也需要谨慎&#xff0c;错误的索引策略可能导致性能下降甚至系统崩溃。本文将深入探讨如何通过索引优化查询性能&#xf…...

【Go每日一练】随机密码生成器

&#x1f47b;创作者&#xff1a;丶重明 &#x1f47b;创作时间&#xff1a;2025年3月17日 &#x1f47b;擅长领域&#xff1a;运维 目录 1.&#x1f636;‍&#x1f32b;️题目&#xff1a;随机密码生成器2.&#x1f636;‍&#x1f32b;️密码生成可用资源3.&#x1f636;‍&…...

【QA】模板方法模式在Qt中有哪些应用?

在 Qt 框架中&#xff0c;模板方法模式&#xff08;Template Method Pattern&#xff09;被广泛应用于框架的设计中&#xff0c;通过定义算法骨架并允许子类在不改变结构的情况下重写部分步骤。以下是 Qt 中典型的应用场景及示例&#xff1a; 1. 事件处理&#xff08;Event Ha…...

VSTO(C#)Excel开发13:实现定时器

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

Vue:单文件组件

Vue&#xff1a;单文件组件 1、 什么是单文件组件&#xff1f; 在传统的Vue开发里&#xff0c;我们接触的是非单文件组件&#xff0c;它们通常被定义在同一个HTML文件中&#xff0c;随着项目规模的扩大&#xff0c;代码会变得杂乱无章&#xff0c;维护起来极为困难。而单文件…...

网络编程---创建客户端和服务端以及协议包

一&#xff0c;创建客户端和服务端的思维导图 首先我们要知道客户端和服务端在网络中进行通信是依靠IP地址和端口号的&#xff0c;所以第一步就是创建一个套接字存储ip和port。通过套接字建立连接后通过read&#xff0c;write函数实现两者之间的交流&#xff08;套接字的描述符…...

云安全相关博客阅读(四)

How we built Pingora, the proxy that connects Cloudflare to the Internet 基于 Rust 构建 Pingora&#xff0c;作为 Nginx 的替代方案&#xff1b; Nginx 作为常用代理服务&#xff0c;广泛应用于 CDN、WAF、Stream、Tunnel 等场景&#xff0c;是基础网络设施 然而&…...

靶场(十三)---小白心得思路分享---Levram

启程&#xff1a; 老样子开扫端口&#xff0c;22端口自动忽略&#xff0c;看到8000端口搭载着Gerapy服务 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 256 b9:bc:8f:01:3f:85:5d:f9…...

高级java每日一道面试题-2025年3月04日-微服务篇[Eureka篇]-Eureka是什么?

如果有遗漏,评论区告诉我进行补充 面试官: Eureka是什么&#xff1f; 我回答: 在Java高级面试中&#xff0c;关于Eureka的讨论通常会涵盖其基本概念、组件与架构、工作原理、高级特性以及与其他服务发现工具的比较等多个方面。以下是结合提供的内容对Eureka进行的详细解析和…...

Linux的根目录全知道

Linux的根目录(/)遵循文件系统层次结构标准(FHS),定义了各目录的用途。以下是主要目录及其功能的详细说明: 核心目录结构 /bin 作用:存放基础用户命令(所有用户可用)。示例:ls, cp, cat, bash等。注意:在部分系统中,/bin可能是/usr/bin的符号链接(通过usrmerge合并…...

嵌入式裸机设计--MCU常用裸机架构有哪些?

为什么是裸机设计 792125321入群学习更高效&#xff01; 在MCU&#xff08;微控制器单元&#xff09;裸机开发中&#xff0c;我们常见的架构设计主要围绕如何高效管理资源和任务调度。认识这些开发方式&#xff0c;对我们开发一个小型项目来说及有好处&#xff01; 下面介绍…...

基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现

基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函…...

Rocky Linux 9.x 基于 kubeadm部署k8s 1.32

一、部署说明 1、主机操作系统说明 序号操作系统及版本备注1Rocky Linux release 9下载链接&#xff1a;https://mirrors.163.com/rocky/9.5/isos/x86_64/Rocky-9.5-x86_64-minimal.iso 2、主机硬件配置说明 作用IP地址操作系统配置关键组件k8s-master01192.168.234.51Rocky…...

linux入侵排查-综合日志分析

1.综合日志分析 1.掌握linux环境下系统日志的分析方法 2.掌握web访问日志的分析方法 3.掌握数据库日志的分析方法 4.掌握数据库日志的分析方法 5.熟悉linux中常用日志分析命令 实验环境 2.实验预设问题 1.定位攻击者ip地址 2.分析攻击者首次成功登录web管理后台的时间 …...

网络华为HCIA+HCIP 以太网链路聚合与交换机堆叠、集群

网络可靠性 网络的可靠性指当设备或者链路出现单点或者多点故障时保证网络服务不间断的能力。网络的可靠性可以从单板、设备、链路多个层面实现。 单板可靠性 以S12700E-8为例&#xff0c;设备提供8个线路板槽位、4个交换网板槽位、2个主控板槽位、6个电源模块槽位、4个风扇…...

[原创](Modern C++)现代C++的关键性概念: 灵活多变的绑定: std::bind

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、C …...

[QT]深入理解Qt中的信号与槽机制

文章目录 信号与槽1. 信号和槽概述信号的本质槽的本质说明 2. 信号和槽的使用2.1 连接信号和槽2.2 查看内置信号和槽2.3 通过 Qt Creator 生成信号槽代码 3. 自定义信号和槽3.1 基本语法3.2 带参数的信号和槽**示例1&#xff1a;重载信号槽****示例2&#xff1a;信号槽参数列表…...

电脑管家如何清理内存及垃圾,提升电脑性能

电脑在长时间使用后&#xff0c;常常会变得越来越卡顿&#xff0c;打开程序的速度变慢&#xff0c;甚至响应迟缓。这时&#xff0c;不少用户会选择使用电脑管家来进行内存清理和垃圾清理。那么&#xff0c;电脑管家是如何清理内存的&#xff1f;它又是如何清理垃圾的&#xff1…...

OpenCV图像处理:分割、合并、打码、组合与边界填充

引言 OpenCV是一个功能强大的计算机视觉库&#xff0c;广泛应用于图像处理、视频分析、物体检测等领域。本文将结合代码示例&#xff0c;详细介绍如何使用OpenCV进行图像的分割、合并、打码、组合以及边界填充等操作。 1. 图像的分割与合并 1.1 图像分割 在OpenCV中&#xff…...

游戏立项时期随笔记录(1)

模拟经营的项目还没有完全结束&#xff0c;这几天又有可能涉及到一个新项目。感想随笔记录一下&#xff0c;防止忘记。今天一天整理这个&#xff0c;搞得今天没时间看数学和AI。 在 Unity3D 游戏前端主程序的立项时期&#xff0c;核心目标是明确技术方向、评估可行性、搭建基础…...

C#入门学习记录(四)C#运算符详解:掌握算术与条件运算符的必备技巧+字符串拼接

一、运算符概述 运算符是程序进行数学运算、逻辑判断的核心工具&#xff0c;C#中的运算符分为&#xff1a; 算术运算符 → 数学计算&#xff08; - * / %&#xff09; 条件运算符 → 三目判断&#xff08;?:&#xff09; 关系运算符 → 比较大小&#xff08;> < &#…...

DeepSeek 3FS 与 JuiceFS:架构与特性比较

近期&#xff0c;DeepSeek 开源了其文件系统 Fire-Flyer File System (3FS)&#xff0c;使得文件系统这一有着 70 多年历时的“古老”的技术&#xff0c;又获得了各方的关注。在 AI 业务中&#xff0c;企业需要处理大量的文本、图像、视频等非结构化数据&#xff0c;还需要应对…...

汽车PKE无钥匙进入系统一键启动系统定义与原理

汽车智能钥匙&#xff08;PKE无钥匙进入系统&#xff09;一键启动介绍 系统定义与原理 汽车无钥匙进入系统&#xff0c;简称PKE&#xff08;Passive Keyless Entry&#xff09;&#xff0c;该系统采用了RFID无线射频技术和车辆身份编码识别系统&#xff0c;率先应用小型化、小…...

【深度学习与大模型基础】第6章-对角矩阵,对称矩阵,正交矩阵

一、对角矩阵 对角矩阵&#xff08;Diagonal Matrix&#xff09;是一种特殊的方阵&#xff0c;其非对角线上的元素均为零&#xff0c;只有对角线上的元素可能非零。具体来说&#xff0c;对于一个 nn的矩阵 A[]&#xff0c;如果满足 则 AA 称为对角矩阵。对角矩阵通常表示为&am…...

go语言中切片的长度和容量详解

Go 语言中,切片(Slice) 是一种动态数组,它的核心特性由 长度(Length) 和 容量(Capacity) 共同定义。这两个概念是操作切片时的关键,理解它们的含义和区别能帮助你高效管理内存并避免常见错误。 一、长度(Length) 定义:切片的长度表示当前包含的实际元素个数,即可以…...