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

【C++】2039:【例5.6】冒泡排序


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯题目描述
  • 💯我的初步实现
    • 我的代码实现问题分析
  • 💯老师的实现方式
    • 老师代码的特点分析
    • 老师代码的执行过程
  • 💯我的代码与老师代码的对比
    • 优点对比
    • 可改进之处
  • 💯冒泡排序的优化与扩展
    • 1. 提前终止优化
    • 2. 时间复杂度分析
    • 3. 冒泡排序的优缺点
      • 优点:
      • 缺点:
  • 💯小结


在这里插入图片描述


💯前言

  • 排序是计算机科学中的基础技能之一,而在众多的排序算法中,冒泡排序是一种简单易懂但效率不高的算法。这篇文章将通过一个实际的题目来详细讲解冒泡排序的原理、实现和优化,并对不同实现方式进行深入分析与对比。本文旨在帮助读者透彻理解冒泡排序的核心思想,掌握其实现细节,并在学习中培养优化代码的意识。
    C++ 参考手册
    在这里插入图片描述

💯题目描述

2039:【例5.6】冒泡排序
在这里插入图片描述

本次的题目要求编写程序实现从大到小排序的冒泡排序算法。以下是完整的题目描述:

题目名称:冒泡排序

题目描述
编程输入 n n n ( 1 ≤ n ≤ 20 ) (1 \leq n \leq 20) (1n20) 个小于 1000 1000 1000 的非负整数,然后自动按从大到小的顺序输出。(冒泡排序)

输入格式

  • 第一行,数字个数 n n n
  • 第二行, n n n 个非负整数。

输出格式

  • 按从大到小的顺序输出 n n n 个非负整数,每个数占一行。

输入样例

5
2 5 8 6 12

输出样例

12
8
6
5
2

💯我的初步实现

以下是我的初步代码实现,采用了传统的冒泡排序算法。

#include <iostream>
using namespace std;const int N = 25;
int arr[N];int main()
{int n = 0;cin >> n;for(int i = 0; i < n; i++){cin >> arr[i];}for(int m = 1; m < n; m++){for(int i = 0; i < n; i++){if(arr[i] < arr[i + 1]){int temp = arr[i + 1];arr[i + 1] = arr[i];arr[i] = temp;}}}for(int i = 0; i < n; i++){cout << arr[i] << endl;}return 0;
} 

在这里插入图片描述

我的代码实现问题分析

  1. 数组越界问题

    • 内层循环条件是 i < n,这会导致在最后一次循环时访问 arr[i+1],从而导致数组越界。
    • 正确的循环范围应该是 i < n - 1
  2. 冗余比较

    • 冒泡排序的内层循环范围可以逐渐缩小,每轮外层循环结束后,未排序部分的最后一个元素已经是当前范围的最大值,无需再比较。
  3. 可读性不佳

    • 外层和内层循环的逻辑可以通过变量命名和结构调整进一步优化,提高代码的可读性和易理解性。

💯老师的实现方式

以下是老师提供的冒泡排序代码:

#include <iostream>
using namespace std;const int N = 20;
int arr[N];int main()
{int n = 0;cin >> n;for (int i = 0; i < n; i++){cin >> arr[i];}for (int i = 0; i < n - 1; i++){for (int j = 0; j <= n - 1 - i; j++){if (arr[j] < arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}for (int i = 0; i < n; i++){cout << arr[i] << endl;}return 0;
}

在这里插入图片描述

老师代码的特点分析

  1. 外层循环控制排序轮次

    • for (int i = 0; i < n - 1; i++) 控制冒泡排序的轮次,最多需要 n-1 轮即可完成排序。
  2. 内层循环范围逐渐缩小

    • for (int j = 0; j <= n - 1 - i; j++) 每轮内层循环范围逐渐缩小,避免对已经排好序的部分进行无效比较。
  3. 从大到小排序的核心条件

    • if (arr[j] < arr[j + 1]) 实现从大到小的顺序。只有当前一个元素小于后一个元素时,才交换两者的位置。

老师代码的执行过程

以下通过一个输入样例 5 2 5 8 6 12 来演示代码执行过程:

  • 初始数组[2, 5, 8, 6, 12]
  • 第 1 轮冒泡
    • 比较 25,交换,数组变为 [5, 2, 8, 6, 12]
    • 比较 28,交换,数组变为 [5, 8, 2, 6, 12]
    • 比较 26,交换,数组变为 [5, 8, 6, 2, 12]
    • 比较 212,交换,数组变为 [5, 8, 6, 12, 2]
  • 第 2 轮冒泡
    • 比较 58,交换,数组变为 [8, 5, 6, 12, 2]
    • 比较 56,交换,数组变为 [8, 6, 5, 12, 2]
    • 比较 512,交换,数组变为 [8, 6, 12, 5, 2]
  • 第 3 轮冒泡
    • 比较 86,不交换。
    • 比较 612,交换,数组变为 [8, 12, 6, 5, 2]
  • 第 4 轮冒泡
    • 比较 812,交换,数组变为 [12, 8, 6, 5, 2]

最终输出

12
8
6
5
2

💯我的代码与老师代码的对比

优点对比

  • 老师的代码避免了我的实现中存在的数组越界问题。
  • 内层循环范围优化:老师代码的内层循环范围逐渐缩小,减少了无效比较。

可改进之处

  • 老师的代码没有加入“提前终止”优化。如果某一轮没有发生任何交换,说明数组已经有序,可以提前结束外层循环。

💯冒泡排序的优化与扩展

1. 提前终止优化

以下是加入“提前终止”优化的代码:

for (int i = 0; i < n - 1; i++)
{bool swapped = false;for (int j = 0; j < n - 1 - i; j++){if (arr[j] < arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;swapped = true;}}if (!swapped) break;
}
  • 原理:如果某轮排序中没有发生任何交换,说明数组已经是有序的,可以直接跳出外层循环,从而减少不必要的遍历。

2. 时间复杂度分析

  • 最优时间复杂度:当数组本身已经有序时,冒泡排序只需进行一次完整的遍历,复杂度为 O ( n ) O(n) O(n)
  • 最坏时间复杂度:数组完全逆序时,冒泡排序需要进行 n ( n − 1 ) / 2 n(n-1)/2 n(n1)/2 次比较,复杂度为 O ( n 2 ) O(n^2) O(n2)
  • 平均时间复杂度 O ( n 2 ) O(n^2) O(n2)

3. 冒泡排序的优缺点

优点:

  1. 实现简单,代码易于理解。
  2. 对于小规模数据,性能尚可。
  3. 稳定排序:相同元素的相对顺序不会改变。

缺点:

  1. 时间复杂度较高,不适合大规模数据。
  2. 交换操作多,影响性能。

💯小结

通过本文对题目的详细解析,我们不仅理解了冒泡排序的基本原理与实现过程,还对代码中的潜在问题进行了修复与优化。冒泡排序虽然不是高效的排序算法,但它的简单性使其成为学习排序思想的绝佳起点。通过对比不同的实现方式和优化策略,希望读者能够更加深刻地理解排序的核心思想,并在实际编程中灵活应用更高效的排序算法。


在这里插入图片描述


在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

学习 C++ 的过程如同一场探索复杂编程世界的旅程。在这个旅途中,我深刻体会到了 C++ 的强大,同时也感受到它的复杂性。以下是我的一些学习心得和感悟,希望能够对正在学习 C++ 的朋友们有所帮助。

扎实基础是关键
C++ 的复杂性往往体现在它是一个“多范式”的编程语言,既支持面向过程,也支持面向对象,同时还提供了现代化的泛型编程和函数式编程能力。在学习初期,掌握基础概念非常重要,例如:

  • 变量和数据类型: 理解变量的作用域、生命周期,熟悉基础类型(如 intdouble)以及它们的内存占用。
  • 控制流: 熟练掌握 if-elseforwhile 等基本语法结构,这是编程逻辑的核心。
  • 数组和指针: 理解一维数组、二维数组,特别是指针与数组之间的关系,以及指针的实际用途。

基础知识扎实,才能在后续深入学习复杂特性时不被细节绊住脚步。

理解面向对象编程的核心
C++ 是一门面向对象的语言,OOP(Object-Oriented Programming)是其核心思想之一。在学习面向对象编程时,我总结出以下几点心得:

  • 类与对象: 理解类是对象的模板,而对象是类的具体实例。要清楚类的定义和对象的创建过程。
  • 封装性: 通过 publicprivateprotected 等访问权限控制,保护对象的内部状态。
  • 继承性: 学会通过继承复用已有代码,并理解多态的作用。尤其需要搞清楚虚函数的机制和作用。
  • 多态性: 理解动态绑定和静态绑定的差异,虚函数表(vtable)的概念对理解多态背后的实现至关重要。

抓住 C++ 的现代特性
C++ 从最初的 C++98 到现在的 C++20,语言特性发生了巨大的变化。学习现代 C++ 特性不仅可以让代码更简洁高效,也可以大幅提升程序的可读性。以下几个现代特性是我学习中的重点:

  • 智能指针(Smart Pointer): 传统指针的内存管理很复杂,而现代 C++ 提供了 std::shared_ptrstd::unique_ptr 等智能指针,大大简化了内存管理。
  • STL(标准模板库): STL 是 C++ 的一大优势,学习如何使用容器(如 vectormapset)和算法(如 sortfind)可以大幅提高开发效率。
  • lambda 表达式: 学习 lambda 表达式可以帮助写出简洁的代码,尤其是在配合 STL 算法时。
  • constexpr 和 auto: 这些特性使代码更加灵活高效,例如 constexpr 在编译期计算常量,auto 自动推导变量类型。

学会调试和优化
编程不可能一次成功,尤其是面对复杂的 C++ 程序,调试能力显得尤为重要。我在学习过程中发现,掌握以下调试技巧非常关键:

  • 使用调试器: 熟练使用 gdb 或 IDE(如 VSCode、CLion)的调试工具,能快速定位问题。
  • 日志输出: 在关键位置添加调试信息(std::cout),可以快速了解程序的运行状态。
  • 内存调试: 借助工具(如 Valgrind)检查内存泄漏和未定义行为,这对 C++ 尤其重要。

同时,在程序优化方面,也需要不断思考如何让代码更高效:

  • 算法优化: 优化算法的时间复杂度和空间复杂度。
  • 避免冗余拷贝: 使用引用传递(const &)或移动语义(std::move)。
  • 线程并发: 学习 C++ 的多线程支持(如 std::threadstd::async),在多核时代尤为重要。

理解内存管理的复杂性
C++ 的强大之处在于对内存的直接控制,但这同时也是学习的难点之一。在内存管理方面,我总结了以下几点:

  • 动态内存分配: 学会使用 newdelete,但同时也要理解其局限性。
  • 避免内存泄漏: 每次分配的内存必须确保释放,养成良好的编程习惯。
  • RAII(资源获取即初始化): 通过构造函数获取资源,析构函数释放资源,避免手动管理资源的复杂性。
  • 智能指针的使用: 用智能指针替代裸指针,是现代 C++ 的推荐实践。

实践是最好的老师
学习编程语言的最终目标是使用它解决实际问题。因此,多写代码、多实践是掌握 C++ 的关键。在学习过程中,我尝试做了以下事情:

  • 实现数据结构和算法: 用 C++ 实现常见的数据结构(如链表、栈、队列)和算法(如排序、搜索)。
  • 编写小项目: 比如一个简单的学生管理系统,包含类的定义、文件操作、输入输出等。
  • 参与开源项目: 在 GitHub 上寻找 C++ 的开源项目,阅读代码并尝试贡献。

通过实践,我不仅巩固了语法知识,也锻炼了编程思维和解决问题的能力。

坚持学习,永不止步
C++ 是一门深奥的语言,其应用范围极广,从操作系统到图形渲染、从嵌入式开发到游戏引擎,都能看到它的身影。因此,学习 C++ 是一个持续深入的过程。要保持好奇心和耐心,深入理解语言的细节,同时不断学习最新的语言标准和实践方法。

总结
学习 C++ 是一场挑战,也是一场收获满满的旅程。从基础语法到面向对象,从 STL 到现代特性,再到内存管理和性能优化,每一步都让我对编程有了更深的理解。C++ 不仅教会了我编程技能,更让我养成了严谨和高效的思维习惯。

对于初学者,我的建议是:扎实基础,循序渐进;多写代码,多做总结;不怕犯错,坚持不懈。最终,你会发现,C++ 的世界不仅复杂,更充满无限可能!

相关文章:

【C++】2039:【例5.6】冒泡排序

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;我的初步实现我的代码实现问题分析 &#x1f4af;老师的实现方式老师代码的特点分析老师代码的执行过程 &#x1f4af;我的代码与老师代码的对比优点…...

【Java回顾】Day4 反射机制

反射机制 之前学过一部分&#xff0c;笔记在20250103Java包_网络编程.md里,这里在之前的笔记的基础上做一些补充。 反射&#xff1a;得到class对象后反向获取对象的各种信息。 包 Field 类或接口中的字段(成员变量)&#xff0c;动态访问和修改类的字段 模板 获取Class 对象 …...

MATLAB画柱状图

一、代码 clear; clc; figure(position,[150,100,900,550])%确定图片的位置和大小&#xff0c;[x y width height] %准备数据 Y1[0.53,7.9,8.3;0.52,6.8,9.2;0.52,5.9,8.6;2.8,5.8,7.9;3.9,5.2,7.8;1.8,5.8,8.4]; % withoutNHC X11:6; %画出4组柱状图&#xff0c;宽度1 h1…...

web漏洞之文件包含漏洞

一、文件包含漏洞 1、把DVWA页面改为low级别&#xff0c;然后点击File Inclusion页面 原理是File Inclusion页面访问的是low.php和include.php&#xff0c;这两个页面包含了include($_GET[page])这句话&#xff0c;意思是page会把用户输入的参数带进来然后由$_GET读取&#x…...

spring mvc源码学习笔记之六

pom.xml 内容如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…...

深入理解 PyTorch 的 Dataset 和 DataLoader:构建高效数据管道

文章目录 简介PyTorch 的 DatasetDataset 的基本概念自定义 Dataset实现 __init__ 方法示例&#xff1a;从 CSV 文件加载数据 实现 __len__ 方法实现 __getitem__ 方法另一种示例&#xff1a;直接传递列表训练集和验证集的定义 1. 单个 Dataset 类 数据分割2. 分别定义两个 Da…...

VSCode设置ctrl或alt+mouse(left)跳转

总结&#xff1a; &#xff08;1&#xff09;VSCode初次远程连接服务器时&#xff0c;需要在服务器上下载 python 拓展&#xff0c;然后选择对应的环境 &#xff08;2&#xff09;VSCode设置ctrl或altmouse(left)跳转到定义...

在Ubuntu 18.04.6 LTS安装OpenFace流程

一、修改配置:将gcc8&#xff0c;g8作为默认选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 sudo update-alternatives --config gcc 选择版本&#xff0c;再查看gcc --version sudo update-alternatives --install /usr/bin/g g /usr/bin/g-…...

微服务拆分的艺术:构建高效、灵活的系统架构

目录 一、微服务拆分的重要性 二、微服务拆分的策略 1. 按照业务领域拆分 2. 按照团队结构拆分 3. 按照业务边界拆分 4. 按照数据和数据库拆分 5. 按照用户界面或外部接口拆分 6. 按照功能模块或领域驱动设计拆分 7. 按照性能和可伸缩性需求拆分 三、微服务拆分的实践…...

PHP框架+gatewayworker实现在线1对1聊天--发送消息(6)

文章目录 发送消息原理说明发送功能实现html部分javascript代码PHP代码 发送消息原理说明 接下来我们发送聊天的文本信息。点击发送按钮的时候&#xff0c;会自动将文本框里的内容发送出去。过程是我们将信息发送到服务器&#xff0c;服务器再转发给对方。文本框的id为msgcont…...

java项目之读书笔记共享平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 读书笔记共享平台的主要使…...

RabbitMq的Java项目实践

在现代软件开发中&#xff0c;消息队列&#xff08;Message Queue&#xff0c;简称MQ&#xff09;作为一种重要的组件&#xff0c;承担着上下游消息传递和通信的重任。RabbitMQ作为一款流行的开源消息队列中间件&#xff0c;凭借其高可用性、可扩展性和易用性等特点&#xff0c…...

气膜球幕:引领元宇宙时代的科技与艺术光影盛宴—轻空间

在科技与艺术交织的时代&#xff0c;未来的观影体验将不再受限于传统屏幕的束缚。随着气膜球幕的崭新亮相&#xff0c;突破性的光影效果和沉浸式体验让我们走进了一个全新的视听世界。这不仅仅是一个简单的球形影院&#xff0c;它是连接现实与虚拟、科技与艺术、光与影的桥梁&a…...

行为模式2.命令模式------灯的开关

行为型模式 模板方法模式&#xff08;Template Method Pattern&#xff09;命令模式&#xff08;Command Pattern&#xff09;迭代器模式&#xff08;Iterator Pattern&#xff09;观察者模式&#xff08;Observer Pattern&#xff09;中介者模式&#xff08;Mediator Pattern…...

Linux环境下静态库和动态库的实现

Linux 环境下静态库和动态库的实现 在软件开发中&#xff0c;库是非常重要的组成部分。它们包含了一组可复用的函数和代码片段&#xff0c;用于提高开发效率和代码质量。在Linux系统中&#xff0c;库分为静态库和动态库两种。本文将介绍它们的实现方式&#xff0c;结合C语言代…...

如何很快将文件转换成另外一种编码格式?编码?按指定编码格式编译?如何检测文件编码格式?Java .class文件编码和JVM运行期内存编码?

如何很快将文件转换成另外一种编码格式? 利用VS Code右下角的"选择编码"功能&#xff0c;选择"通过编码保存"可以很方便将文件转换成另外一种编码格式。尤其&#xff0c;在测试w/ BOM或w/o BOM, 或者ANSI编码和UTF编码转换&#xff0c;特别方便。VS文件另…...

Tortoisegit 安装之后没有Add、ignore解决

在本地的仓库文件夹中点击右键&#xff0c;找到Settings&#xff0c; 从General 找到Contex Menu&#xff0c;我的系统是Win11&#xff0c;所以用Win11 Contex Menu 将所需要的操作打勾即可。...

线性代数考研笔记

行列式 背景 分子行列式&#xff1a;求哪个未知数&#xff0c;就把b1&#xff0c;b2放在对应的位置 分母行列式&#xff1a;系数对应写即可 全排列与逆序数 1 3 2&#xff1a;逆序数为1 奇排列 1 2 3&#xff1a;逆序数为0 偶排列 将 1 3 2 只需将3 2交换1次就可以还原原…...

C语言带参数的宏定义的相关知识汇总(最常用的形式、带标记分隔符##的形式...)

阅读大型C工程代码时&#xff0c;绕不开带参数的宏定义的阅读&#xff0c;所以有必要强化一下这一块的知识。 01-带参数的宏定义最常用的形式 # define S(a,b) a*b ... ... ... area S(3,2);则在编译预处理时area S(3,2);被展开为&#xff1a; area 3 * 2;02-带标记分隔符…...

cpp编译链接等

一、编译预处理 C程序编译的过程&#xff1a;预处理 -> 编译&#xff08;优化、汇编&#xff09;-> 链接 预处理指令主要有以下三种&#xff1a; 包含头文件&#xff1a;#include 宏定义&#xff1a;#define&#xff08;定义宏&#xff09;、#undef&#xff08;删除宏…...

openbmc sdk09.03 适配(一)

1.说明 本节是根据最新的sdk09.03适配ast2600平台。 sdk下载路径为: https://github.com/AspeedTech-BMC/openbmc可参阅文档: https://blog.csdn.net/wit_yuan/article/details/144613247nfs挂载方法: # mount -o nolock -t nfs serverip:/xx...

JavaScript HTML DOM 实例

JavaScript HTML DOM 实例 JavaScript 的 HTML DOM(文档对象模型)允许您通过脚本来控制 HTML 页面。DOM 是 HTML 文档的编程接口,它将 Web 页面与编程语言连接起来,使得开发者可以改变页面中的内容、结构和样式。在这篇文章中,我们将通过一系列实例来探讨如何使用 JavaSc…...

【Vue】:解决动态更新 <video> 标签 src 属性后视频未刷新的问题

问题描述 在 Vue.js 项目&#xff0c;当尝试动态更新 <video> 标签的 <source> 元素 src 属性来切换视频时&#xff0c;遇到了一个问题&#xff1a;即使 src 属性已更改&#xff0c;浏览器仍显示旧视频。具体表现为用户选择新视频后&#xff0c;视频区域继续显示之…...

C语言| 二维数字的定义

【二维数组】 二维数组的本质就是一维数组&#xff0c;表现形式上是二维的。 定义一般形式为 类型说明符 数组名[常量表达式][常量表达式]; 举例 int a[2][3]; 定义了一个2行3列的二维数组a&#xff0c;共有6个元素。 元素名字依次是&#xff1a;a[0][0],a[0][1],a[0][…...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)—(十)(求解数学中特殊的数)

实战训练1—完全数 问题描述&#xff1a; 数学上的“完全数”是指真因子&#xff08;除了自身以外的约数&#xff09;之和等于它本身的自然数。例如&#xff0c;6的因子是1,2,3&#xff0c;而1236&#xff0c;所以6是完全数。如果一个正整数小于它的所有真因数之和&#xff0…...

【大模型】ChatGPT 数据分析与处理使用详解

目录 一、前言 二、AI 大模型数据分析介绍 2.1 什么是AI数据分析 2.2 AI数据分析与传统数据分析对比 2.2.1 差异分析 2.2.2 优劣势对比 2.3 AI大模型工具数据分析应用场景 三、AI大模型工具数据分析操作实践 3.1 ChatGPT 常用数据分析技巧操作演示 3.1.1 快速生成数据…...

[gcc]常见编译开关

GCC 提供了许多编译开关&#xff08;编译选项&#xff09;&#xff0c;这些开关可以用于控制编译过程的各种方面&#xff0c;如优化级别、调试信息、警告和错误处理等。 以下是一些常见的 GCC 编译开关&#xff1a; -o&#xff1a;指定输出文件名。例如&#xff0c;gcc -o myp…...

iOS实现在collectionView顶部插入数据效果

有时候&#xff0c;我们会遇到这种需求&#xff0c;就是下拉刷新的时候&#xff0c;在 collectionView顶部插入数据&#xff0c;这个时候&#xff0c;需要我们注意 主要有两点 1 关闭隐式动画 由于我们使用insert在collectionView顶部插入数据是有从头部插入的隐式动画的&#…...

GPIO、RCC库函数

void GPIO_DeInit(GPIO_TypeDef* GPIOx); void GPIO_AFIODeInit(void); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //输出 读 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,…...

PostgreSQL学习笔记(一):PostgreSQL介绍和安装

目录 概念 PostgreSQL简介 PostgreSQL的关键特性 1. 标准兼容性 2. 扩展性 3. 数据完整性和可靠性 4. 丰富的数据类型 5. 查询能力 6. 事务和并发控制 7. 扩展和插件 8. 跨平台和多语言支持 9. 高可用性和扩展性 常用场景 安装 Linux apt安装 下载安装包安装 客…...

从摩托罗拉手机打印短信的简单方法

昨天我试图从摩托罗拉智能手机上打印短信&#xff0c;但当我通过USB将手机连接到电脑时&#xff0c;我在电脑上找不到它们。由于我的手机内存已达到限制&#xff0c;并且我想保留短信的纸质版本&#xff0c;您能帮我将短信从摩托罗拉手机导出到计算机吗&#xff1f; 如您所知&…...

矩阵运算提速——玩转opencv::Mat

介绍:用Eigen或opencv::Mat进行矩阵的运算&#xff0c;比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因&#xff1a; 优化的底层实现…...

vue请求后端需要哪些问题

在使用 Vue 前端框架请求后端服务时&#xff0c;需要考虑和解决的问题有很多。以下是一个详细的讲解&#xff1a; 1. **API 设计与文档** - **明确 API 端点**&#xff1a;了解后端提供的 API 端点&#xff08;URL&#xff09;&#xff0c;包括资源的路径和操作方法&#xff08…...

QML Image详解

1. 概述 Image 是 QML 中用于显示图片的基本组件。它允许开发者加载和显示各种格式的图像文件&#xff08;如 PNG, JPEG, GIF 等&#xff09;&#xff0c;并提供了多种配置选项来控制图片的显示方式和行为。Image 元素支持各种图像处理功能&#xff0c;比如缩放、裁剪、模糊等…...

Chapter4.1 Coding an LLM architecture

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture 4 Implementing a GPT model from Scratch To Generate Text 本章节包含 编写一个类似于GPT的大型语言模型&#xff08;LLM&#xff09;&#xff0c;这个模型可以被训练来生…...

Linux 端口知识全解析

Linux 端口知识全解析 在 Linux 系统的网络世界里&#xff0c;端口如同一个个小小的“窗口”&#xff0c;数据的进出都依赖它们有条不紊地运作。理解 Linux 端口知识&#xff0c;无论是对于系统管理员排查网络故障&#xff0c;还是开发者进行网络编程&#xff0c;都至关重要。…...

《Armv8-A virtualization》学习笔记

1.MAIR 的全称是 Memory Attribute Indirection Register。它是ARM架构中的一种寄存器&#xff0c;用于定义内存的属性&#xff0c;并提供一种间接访问内存属性的机制。MAIR寄存器包含多个字段&#xff0c;这些字段指示不同类型内存的属性&#xff0c;例如是否可以缓存、是否为…...

23. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--预算

在每个月发工资后很多人会对未来一个月的花销进行大致的计划&#xff0c;这个行为叫做预算。那么在这篇文章中我们将一起开发预算服务。 一、需求 预算需求就是简单的增删改查&#xff0c;虽然比较简单&#xff0c;但是也有几点需要注意。 编号需求说明1新增预算1. 针对每种…...

DOS攻击的原理和实现 (网络安全)hping3和Slowloris的运用

DoS攻击的原理和实现 DoS攻击&#xff08;Denial of Service Attack&#xff0c;拒绝服务攻击&#xff09;是指通过恶意手段使目标服务器、服务或网络资源无法正常提供服务&#xff0c;从而影响正常用户的访问。DoS攻击通常通过消耗目标系统的资源&#xff08;如带宽、内存、处…...

十三、Vue 过渡和动画

文章目录 一、Vue过渡和动画概述1. 过渡的基本原理2. 动画的基本原理二、使用 CSS 过渡1. 单元素过渡2. 过渡模式in - out 模式out - in 模式三、使用 CSS 动画1. 单元素动画2. 动画结合过渡四、JavaScript 钩子函数实现过渡和动画1. 基本概念2. 示例五、列表过渡1. 基本原理2.…...

Dubbo 关键知识点解析:负载均衡、容错、代理及相关框架对比

1.Dubbo 负载均衡策略&#xff1f; Dubbo 是一个分布式服务框架&#xff0c;它提供了多种负载均衡策略来分发服务调用。在 Dubbo 中&#xff0c;负载均衡的实现是基于客户端的&#xff0c;即由服务消费者&#xff08;Consumer&#xff09;端决定如何选择服务提供者&#xff08…...

仿生的群体智能算法总结之三(十种)

群体智能算法是一类通过模拟自然界中的群体行为来解决复杂优化问题的方法。以下是30种常见的群体智能算法,本文汇总第21-30种。接上文 : 编号 算法名称(英文) 算法名称(中文) 年份 作者 1 Ant Colony Optimization (ACO) 蚁群优化算法 1991 Marco Dorigo 2 Particle Swar…...

《量子比特大阅兵:不同类型量子比特在人工智能领域的优劣势剖析》

在科技的前沿&#xff0c;量子比特与人工智能的融合正开启一扇全新的大门。不同类型的量子比特&#xff0c;如超导、离子阱、光量子等&#xff0c;在与人工智能结合时展现出独特的优势与劣势。 超导量子比特 超导量子比特是目前应用较为广泛且研究相对成熟的量子比特类型。它…...

el-input输入框需要支持多输入,最后传输给后台的字段值以逗号分割

需求&#xff1a;一个输入框字段需要支持多次输入&#xff0c;最后传输给后台的字段值以逗号分割 解决方案&#xff1a;结合了el-tag组件的动态编辑标签 那块的代码 //子组件 <template><div class"input-multiple-box" idinputMultipleBox><div>…...

机器人领域的一些仿真器

模拟工具和环境对于开发、测试和验证可变形物体操作策略至关重要。这些工具提供了一个受控的虚拟环境&#xff0c;用于评估各种算法和模型的性能&#xff0c;并生成用于训练和测试数据驱动模型的合成数据。 Bullet Physics Library 用于可变形物体模拟的一个流行的物理引擎是 B…...

前端-动画库Lottie 3分钟学会使用

目录 1. Lottie地址 2. 使用html实操 3. 也可以选择其他的语言 1. Lottie地址 LottieFiles: Download Free lightweight animations for website & apps.Effortlessly bring the smallest, free, ready-to-use motion graphics for the web, app, social, and designs.…...

腾讯云智能结构化 OCR:驱动多行业数字化转型的核心引擎

在当今数字化时代的汹涌浪潮中&#xff0c;数据已跃升为企业发展的关键要素&#xff0c;其高效、精准的处理成为企业在激烈市场竞争中脱颖而出的核心竞争力。腾讯云智能结构化 OCR 技术凭借其前沿的科技架构与卓越的功能特性&#xff0c;宛如一颗璀璨的明星&#xff0c;在交通、…...

【开源免费】基于SpringBoot+Vue.JS精品在线试题库系统(JAVA毕业设计)

本文项目编号 T 115 &#xff0c;文末自助获取源码 \color{red}{T115&#xff0c;文末自助获取源码} T115&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

c# CodeFirst生成表字段加注释

前置&#xff1a;ORM框架工具使用的FreeSql 背景&#xff1a;开发环境中运行接口&#xff0c;所有的表字段以及备注会自动加上&#xff0c;但是在测试环境时运行就只生成了表&#xff0c;没有把每个字段的注释加上 问题检查&#xff1a; FreeSql CodeFirst 支持将 c# 代码内的注…...

MySQL8.0复制原理和部署配置步骤

1. mysql 主从复制原理 在从库上执行change master to&#xff1b;会将主库的信息保存到从库中的master.info文件中在从库执行start slave;开启io_thread, sql_thread线程;io_thread工作&#xff1b;io_thread通过master.info文件中主库的连接信息去连接主库&#xff1b;连接成…...