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

【C++进阶】关联容器:set类型

目录

一、set 基本概念

1.1 定义与特点

1.2 头文件与声明

1.3 核心特性解析

二、set 底层实现

2.1 红黑树简介

2.2 红黑树在 set 中的应用

三、set 常用操作

3.1 插入元素

3.2 删除元素

3.3 查找元素

3.4 遍历元素

3.5 性能特征

四、set 高级应用

4.1 自定义比较函数

4.2 交集、并集和差集操作

4.3 与其他容器的结合使用

4.4 迭代器操作

4.5 性能优化技巧

五、set 与其他容器的比较

5.1 set 与 vector

5.2 set 与 unordered_set

5.3 选择建议

六、注意事项与常见错误

6.1 迭代器失效问题

6.2 性能考虑

6.3 内存占用

6.4 易错点提醒

七、应用场景与实战案例

八、总结

九、参考资料


在 C++ 编程中,容器是非常重要的工具,它可以帮助我们高效地管理和操作数据。关联容器是 C++ 标准模板库(STL)中的一类特殊容器,它们通过键(key)来存储和访问元素。set 作为关联容器的一种,在很多场景下都有着广泛的应用。本文将全面深入地介绍 set 类型,包括其基本概念、底层实现、常用操作、高级应用以及与其他容器的比较等内容。

一、set 基本概念

1.1 定义与特点

set 是一种关联容器,它用于存储唯一的元素,并且这些元素会根据其值自动进行排序。在 set 中,键(key)和值(value)是相同的,即每个元素既是键也是值。由于 set 不允许有重复的元素,因此插入重复元素时会被忽略。

1.2 头文件与声明

要使用 set,需要包含 <set> 头文件。以下是一个简单的 set 声明示例:

#include <iostream>
#include <set>int main() {std::set<int> mySet; // 声明一个存储 int 类型元素的 setreturn 0;
}

1.3 核心特性解析

std::set是基于红黑树实现的有序关联容器,其设计目标是通过平衡二叉搜索树结构,在保证元素唯一性的同时,实现以下核心特性:

①自动排序机制

  • 插入元素时自动按升序排列
  • 默认使用<运算符比较元素
  • 支持自定义比较函数

②唯一性约束

  • 不允许重复元素
  • 插入重复值时自动去重

③对数时间复杂度操作

  • 插入:O(log n)
  • 删除:O(log n)
  • 查找:O(log n)

④内存动态管理

  • 自动处理内存分配/释放
  • 支持迭代器失效保护

二、set 底层实现

2.1 红黑树简介

set 通常使用红黑树(Red-Black Tree)作为底层数据结构。红黑树是一种自平衡的二叉搜索树,它通过对节点进行着色(红色或黑色)并遵循一些特定的规则来保持树的平衡,从而保证了插入、删除和查找操作的时间复杂度都是 O(logn)。

红黑树的主要特性包括:

  • 每个节点要么是红色,要么是黑色。
  • 根节点是黑色。
  • 每个叶子节点(NIL 节点,空节点)是黑色。
  • 如果一个节点是红色的,则它的两个子节点都是黑色的。
  • 对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

2.2 红黑树在 set 中的应用

在 set 中,红黑树的节点存储了 set 中的元素。当插入一个新元素时,set 会根据元素的值将其插入到红黑树的合适位置,并通过旋转和着色操作来保持树的平衡。查找元素时,set 会从根节点开始,根据元素的值与节点的值进行比较,然后递归地在左子树或右子树中查找,直到找到目标元素或到达叶子节点。

三、set 常用操作

3.1 插入元素

可以使用 insert() 函数向 set 中插入元素。如果插入的元素已经存在于 set 中,则插入操作会被忽略。

#include <iostream>
#include <set>int main() {std::set<int> mySet;mySet.insert(3);mySet.insert(1);mySet.insert(2);for (const auto& element : mySet) {std::cout << element << " ";}std::cout << std::endl;return 0;
}

输出:1 2 3,因为 set 会自动对元素进行排序。

3.2 删除元素

可以使用 erase() 函数从 set 中删除元素。erase() 函数有多种重载形式,可以根据元素的值或迭代器来删除元素。

#include <iostream>
#include <set>int main() {std::set<int> mySet = {1, 2, 3, 4, 5};mySet.erase(3); // 根据元素的值删除auto it = mySet.find(4);if (it != mySet.end()) {mySet.erase(it); // 根据迭代器删除}for (const auto& element : mySet) {std::cout << element << " ";}std::cout << std::endl;return 0;
}

3.3 查找元素

可以使用 find() 函数在 set 中查找元素。如果找到元素,则返回指向该元素的迭代器;如果未找到,则返回 end() 迭代器。

#include <iostream>
#include <set>int main() {std::set<int> mySet = {1, 2, 3, 4, 5};auto it = mySet.find(3);if (it != mySet.end()) {std::cout << "Found: " << *it << std::endl;} else {std::cout << "Not found" << std::endl;}return 0;
}

3.4 遍历元素

可以使用范围 for 循环或迭代器来遍历 set 中的元素。

#include <iostream>
#include <set>int main() {std::set<int> mySet = {1, 2, 3, 4, 5};// 使用范围 for 循环遍历for (const auto& element : mySet) {std::cout << element << " ";}std::cout << std::endl;// 使用迭代器遍历for (auto it = mySet.begin(); it != mySet.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

3.5 性能特征

操作时间复杂度说明
insert()O(log n)插入新元素
erase()O(log n)删除元素
find()O(log n)查找元素
count()O(log n)统计元素出现次数
size()O(1)获取元素数量
empty()O(1)检查是否为空

四、set 高级应用

4.1 自定义比较函数

默认情况下,set 使用 std::less 作为比较函数来对元素进行排序。如果需要自定义排序规则,可以在声明 set 时提供自定义的比较函数。

#include <iostream>
#include <set>// 自定义比较函数,实现降序排序
struct Greater {bool operator()(const int& a, const int& b) const {return a > b;}
};int main() {std::set<int, Greater> mySet = {1, 2, 3, 4, 5};for (const auto& element : mySet) {std::cout << element << " ";}std::cout << std::endl;return 0;
}

4.2 交集、并集和差集操作

可以使用 <algorithm> 头文件中的 set_intersection()set_union() 和 set_difference() 函数来实现 set 的交集、并集和差集操作。

#include <iostream>
#include <set>
#include <algorithm>
#include <vector>int main() {std::set<int> set1 = {1, 2, 3, 4, 5};std::set<int> set2 = {3, 4, 5, 6, 7};std::vector<int> intersection;std::set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(), std::back_inserter(intersection));std::cout << "Intersection: ";for (const auto& element : intersection) {std::cout << element << " ";}std::cout << std::endl;std::vector<int> unionSet;std::set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), std::back_inserter(unionSet));std::cout << "Union: ";for (const auto& element : unionSet) {std::cout << element << " ";}std::cout << std::endl;std::vector<int> difference;std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::back_inserter(difference));std::cout << "Difference (set1 - set2): ";for (const auto& element : difference) {std::cout << element << " ";}std::cout << std::endl;return 0;
}

4.3 与其他容器的结合使用

set 可以与其他容器(如 vectorlist 等)结合使用,以实现更复杂的功能。例如,可以将 vector 中的元素插入到 set 中进行去重和排序。

#include <iostream>
#include <set>
#include <vector>int main() {std::vector<int> vec = {3, 1, 2, 3, 4, 2};std::set<int> mySet(vec.begin(), vec.end());for (const auto& element : mySet) {std::cout << element << " ";}std::cout << std::endl;return 0;
}

4.4 迭代器操作

std::set<int> s = {1, 3, 5, 7, 9};// 反向迭代器
std::cout << "反向遍历: ";
for (auto rit = s.rbegin(); rit != s.rend(); ++rit) {std::cout << *rit << " ";
}// 迭代器失效处理
auto it = s.find(5);
s.erase(it); // 迭代器失效,不可继续使用

4.5 性能优化技巧

批量插入优化:

std::set<int> s;
s.insert({1, 2, 3, 4, 5}); // C++11初始化列表优化

emplace原位构造:

s.emplace(10); // 直接在容器内构造对象,避免临时对象拷贝

预留空间(C++11起): 

s.reserve(100); // 预分配内存减少重分配次数

五、set 与其他容器的比较

操作setunordered_setvector有序
插入O(log n)O(1)平均O(n)
查找O(log n)O(1)平均O(log n)二分
删除O(log n)O(1)平均O(n)
内存占用较高较低紧凑
有序性始终有序无序需排序

5.1 set 与 vector

  • 存储方式vector 是一种顺序容器,它使用连续的内存空间存储元素;而 set 是一种关联容器,使用红黑树存储元素。
  • 元素特性vector 允许有重复的元素,并且元素的顺序是按照插入的顺序排列的;set 不允许有重复的元素,并且元素会自动排序。
  • 查找效率vector 的查找操作的时间复杂度为 O(n),而 set 的查找操作的时间复杂度为 O(logn)。

5.2 set 与 unordered_set

  • 底层实现set 使用红黑树作为底层数据结构,而 unordered_set 使用哈希表作为底层数据结构。
  • 排序特性set 中的元素会自动排序,而 unordered_set 中的元素是无序的。
  • 查找效率unordered_set 的查找操作的平均时间复杂度为 O(1),而 set 的查找操作的时间复杂度为 O(logn)。

5.3 选择建议

  • 如果需要存储唯一的元素并且要求元素有序,那么可以选择 set
  • 如果只需要存储唯一的元素,不关心元素的顺序,并且对查找效率有较高的要求,那么可以选择 unordered_set
  • 如果需要存储多个相同的元素,并且对元素的顺序有要求,那么可以选择 vector

六、注意事项与常见错误

6.1 迭代器失效问题

在对 set 进行插入或删除操作时,可能会导致迭代器失效。例如,在删除一个元素后,指向该元素的迭代器将失效。因此,在使用迭代器时,需要特别注意避免迭代器失效的问题。

#include <iostream>
#include <set>int main() {std::set<int> mySet = {1, 2, 3, 4, 5};auto it = mySet.find(3);if (it != mySet.end()) {mySet.erase(it); // 删除元素后,it 迭代器失效// 不能再使用 it 迭代器}return 0;
}

6.2 性能考虑

虽然 set 的插入、删除和查找操作的时间复杂度都是 O(logn),但在某些情况下,可能会有性能瓶颈。例如,当需要频繁插入和删除元素时,红黑树的旋转和着色操作可能会影响性能。此时,可以考虑使用 unordered_set 来提高性能。

6.3 内存占用

由于 set 使用红黑树作为底层数据结构,它需要额外的内存来存储节点的指针和颜色信息。因此,在对内存占用有严格要求的场景下,需要谨慎使用 set

6.4 易错点提醒

修改元素值:直接修改元素会导致未定义行为

auto it = s.begin();
// *it = 10;  // 错误!元素是const的

迭代器失效:仅删除操作会使指向被删元素的迭代器失效

自定义比较函数:需保证严格弱序关系

// 错误示例:未实现严格弱序
struct BadCompare {bool operator()(int a, int b) {return a <= b;  // 应该用<}
};

七、应用场景与实战案例

案例1:数据去重排序

std::vector<int> nums = {5, 2, 5, 1, 3, 2};
std::set<int> unique_nums(nums.begin(), nums.end());// 输出:1 2 3 5
for(int num : unique_nums) {std::cout << num << " ";
}

案例2:字典序管理

std::set<std::string> dictionary;void add_word(const std::string& word) {dictionary.insert(word);
}bool check_spelling(const std::string& word) {return dictionary.count(word);
}

八、总结

set作为STL中的有序唯一集合容器,在需要维护有序数据且保证元素唯一性的场景中表现卓越。通过红黑树实现的高效操作使其成为处理排序、去重、快速查找等需求的理想选择。掌握set的特性和正确使用方式,将显著提升C++编程能力。

九、参考资料

  •  《C++ Primer(第 5 版)》这本书是 C++ 领域的经典之作,对 C++ 的基础语法和高级特性都有深入讲解。
  • 《Effective C++(第 3 版)》书中包含了很多 C++ 编程的实用建议和最佳实践。
  • 《C++ Templates: The Complete Guide(第 2 版)》该书聚焦于 C++ 模板编程,而using声明在模板编程中有着重要应用,如定义模板类型别名等。
  • C++ 官方标准文档:C++ 标准文档是最权威的参考资料,可以查阅最新的 C++ 标准(如 C++11、C++14、C++17、C++20 等)文档。例如,ISO/IEC 14882:2020 是 C++20 标准的文档,可从相关渠道获取其详细内容。
  • :这是一个非常全面的 C++ 在线参考网站,提供了详细的 C++ 语言和标准库文档。
  • :该网站提供了系统的 C++ 教程,配有丰富的示例代码和清晰的解释,适合初学者学习和理解相关知识。
  • 《Effective STL》Scott Meyers

  • 开源项目STL源码分析


相关文章:

【C++进阶】关联容器:set类型

目录 一、set 基本概念 1.1 定义与特点 1.2 头文件与声明 1.3 核心特性解析 二、set 底层实现 2.1 红黑树简介 2.2 红黑树在 set 中的应用 三、set 常用操作 3.1 插入元素 3.2 删除元素 3.3 查找元素 3.4 遍历元素 3.5 性能特征 四、set 高级应用 4.1 自定义比较…...

Linux内核——X86分页机制

X86分页机制 x86的分页单元支持两种分页模式&#xff1a;常规分页与扩展分页。 常规分页采用两级结构&#xff0c;固定页大小为4KB。线性地址被划分为三个字段&#xff1a; 页目录索引&#xff08;最高10位&#xff09;页表索引&#xff08;中间10位&#xff09;页内偏移&am…...

重温Java - Java基础二

工作中常见的6中OOM 问题 堆内存OOM 堆内存OOM 是最常见的OOM了。出现堆内存OOM 问题的异常信息如下 java.lang.OutOfMemoryError: Java heap space此OOM是由于Java中的heap的最大值&#xff0c;已经不能满足需求了。 举个例子 Test public void test01(){List<OOMTest…...

回溯算法+对称剪枝——从八皇后问题到数独问题(二)

引入&#xff1a; 本节我们进一步完善八皇后问题&#xff0c;学习剪枝、八皇后残局问题 进一步领会逻辑编程的概念&#xff0c;深入体会回溯算法&#xff0c;回顾上一节提到的启发搜索策略。 回顾&#xff1a; 八皇后问题&#xff1a;我们需要在一个空棋盘上放置 n 个皇后&a…...

基于 Spring Boot 瑞吉外卖系统开发(三)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;三&#xff09; 分类列表 静态页面 实现功能所需要的接口 定义Mapper接口 Mapper public interface CategoryMapper extends BaseMapper<Category> {}定义Service接口 public interface CategoryService extends ISe…...

Pascal VOC 2012 数据集格式与文件结构

Pascal VOC 2012 1 Pascal VOC 2012 数据集1.1 数据集概述1.2 文件结构1.3 关键文件和内容格式(1) Annotations/ 目录(2) ImageSets/ 目录(3) JPEGImages/ 目录(4) SegmentationClass/ 和 SegmentationObject/ 目录 1.4 标注格式说明(1) 目标检测标注(2) 语义分割标注(3)实例分…...

11:00开始面试,11:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…...

MySQL与Oracle字段类型对比及迁移指南

文章目录 MySQL与Oracle字段类型对比及迁移指南1. 核心字段类型对照表2. 常见函数对照表2.1 字符串函数2.2 日期函数2.3 数值函数2.4 类型转换函数2.5 空值处理函数2.6 其他常用函数3. 迁移配置细则4. 迁移工具推荐5. 常见问题解决方案6. 性能优化建议MySQL与Oracle字段类型对比…...

Spring MVC 处理 HTTP 状态码、响应头和异常的完整示例

Spring MVC 处理 HTTP 状态码、响应头和异常的完整示例 1. 正常响应处理 通过 ResponseEntity 可以灵活控制 HTTP 状态码、响应头和响应体。 代码示例&#xff1a;创建资源返回 201 并设置 Location 头 import org.springframework.http.HttpHeaders; import org.springfram…...

http页面的加载过程

HTTP/2 核心概念 1.1 流&#xff08;Stream&#xff09; • 定义&#xff1a;HTTP/2 连接中的逻辑通道&#xff0c;用于传输数据&#xff0c;每个流有唯一标识符&#xff08;Stream ID&#xff09;。 • 特点&#xff1a; ◦ 支持多路复用&#xff08;多个流并行传输&#…...

动手人形机器人(RL)

1 PPO的讲解 核心步骤&#xff0c;如策略网络和价值网络的定义、优势估计、策略更新、价值更新等基础功能的实现 2 代码构成 可能涉及 初始化&#xff0c;Behavior Clone 3 动手强化学习 import pytorch as torch class actorcritic ##等待补充 4 PD Gains 在机器人学中&…...

使用RabbitMQ实现异步秒杀

搭建RabbitMQ 在虚拟机上用docker搭建RabbitMQ&#xff0c;首先拉取镜像 docker run --privilegedtrue -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management mkdir -p /usr/local/docker/rabbitmq再创建rabbitmq容器&#xff0c;下面的命令已经能够创建之后…...

基于PyQt5的企业级生日提醒系统设计与实现

在企业人力资源管理场景中,员工生日提醒是一项重要的关怀功能。本文将以一个基于PyQt5开发的生日提醒系统为例,深入解析桌面应用程序开发中的关键技术实现,涵盖GUI设计、数据持久化、系统集成、动画效果等核心模块。 一、技术选型分析 1.1 PyQt5框架优势 跨平台特性:支持W…...

蓝桥杯嵌入式第16届——ADC模数转化部分

将外部的模拟信号转换为数字信号 &#xff08; ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 &#xff09; STM32 - ADC 笔记_stm32 adc电容-CSDN博客 引脚状况 STM32cubemx配置 ADC1配置 ADC2配置 代码部分 …...

拜特科技签约天津城投集团,携手共建司库管理系统

近日&#xff0c;拜特科技成功签约天津城市基础设施建设投资集团有限公司&#xff08;以下简称“天津城投集团”&#xff09;&#xff0c;携手共建司库管理系统。 自2015年结缘以来&#xff0c;拜特科技与天津城投集团已携手并进十年&#xff0c;构建了稳固且高效的合作桥梁。…...

Spring Boot 中集成 Knife4j:解决文件上传不显示文件域的问题

Spring Boot 中集成 Knife4j&#xff1a;解决文件上传不显示文件域的问题 在使用 Knife4j 为 Spring Boot 项目生成 API 文档时&#xff0c;开发者可能会遇到文件上传功能不显示文件域的问题。本文将详细介绍如何解决这一问题&#xff0c;并提供完整的解决方案。 Knife4j官网…...

Nuxt.js的useHead有哪些对象

在Nuxt.js框架中&#xff0c;useHead是一个用于操作页面<head>部分的辅助函数。它返回一个包含多个对象的集合&#xff0c;允许你轻松地在组件中修改或添加 HTML 的<head>内容。 具体来说&#xff0c;useHead 返回的对象集合包括&#xff1a; title: 用于设置页面…...

JavaScript的可选链操作符 ?.

JavaScript的可选链操作符&#xff08;Optional Chaining Operator&#xff09;是 ES2020&#xff08;ES11&#xff09; 引入的新特性&#xff0c;通过语法 ?. 简化对深层嵌套对象属性、方法或数组元素的访问&#xff0c;避免因中间值为 null 或 undefined 而引发的错误。 核…...

增长黑客:激活实验助力增长

激活实验是推动用户增长的重要手段。下面为大家详细介绍激活实验的关键步骤与重点解决问题 激活实验的三个关键步骤 1. 明晰 “啊哈时刻” 路径 “啊哈时刻” 指用户瞬间领悟产品价值的瞬间。要达成这一点&#xff0c;需明确用户体验到 “啊哈时刻” 的所有路径。以在线绘图工具…...

STM32低功耗

设置不同位来配置是哪种低功耗模式 WAKEUP引脚可以唤醒任何睡眠状态,但是只有待机模式是属于WAKEUP唤醒&#xff0c;其他模式都是属于中断唤醒&#xff0c;所以待机模式要使能EWUP引脚&#xff0c;还要手动清除唤醒标志位&#xff08;在进入待机模式前就要清除标志位&#xff…...

【精品PPT】2025固态电池知识体系及最佳实践PPT合集(36份).zip

精品推荐&#xff0c;2025固态电池知识体系及最佳实践PPT合集&#xff0c;共36份。供大家学习参考。 1、中科院化学所郭玉国研究员&#xff1a;固态金属锂电池及其关键材料.pdf 2、中科院物理所-李泓固态电池.pdf 3、全固态电池技术研究进展.pdf 4、全固态电池生产工艺.pdf 5、…...

头歌数据库【数据库概论】第10-11章 故障恢复与并发控制

第1关&#xff1a;数据库恢复技术 1、事务的&#xff08; A&#xff09;特性要求事务必须被视为一个不可分割的最小工作单元 A、原子性 B、一致性 C、隔离性 D、持久性 2、事务的&#xff08;C &#xff09;特性要求一个事务在执行时&#xff0c;不会受到其他事务的影响。 A、原…...

qt之opengl使用

使用qt中的openglWidget绘制一个三角形。自定义的类继承关系sunOpengl : public QOpenGLWidget,QOpenGLFunctions_3_3_Core 代码如下 /*----MainWindow.cpp----------------------------------------------*/ #include "mainwindow.h" #include "./ui_mainwin…...

Spark Core编程

一 Spark 运行架构 1 运行架构 定义 Spark 框架的核心是一个计算引擎&#xff0c;整体来说&#xff0c;它采用了标准 master-slave 的结构 如图所示 2 核心组件 Spark 框架有两个核心组件: 1)Driver 2)Spark 驱动器节点&#xff08;用于执行 Spark 任务中的 main 方法&…...

蓝桥杯 B3619 10 进制转 x 进制

题目描述 给定一个十进制整数 n 和一个小整数 x。将整数 n 转为 x 进制。对于超过十进制的数码&#xff0c;用 A&#xff0c;B ... 表示。 输入格式 第一行一个整数 n&#xff1b; 第二行一个整数 x。 输出格式 输出仅包含一个整数&#xff0c;表示答案。 输入输出样例 …...

spring mvc中不同服务调用类型(声明式(Feign)、基于模板(RestTemplate)、基于 SDK、消息队列、gRPC)对比详解

RestControllerAdvice 和 ControllerAdvice 对比详解 1. 基本概念 注解等效组合核心作用ControllerAdviceComponent RequestMapping&#xff08;隐式&#xff09;定义全局控制器增强类&#xff0c;处理跨控制器的异常、数据绑定或全局响应逻辑。RestControllerAdviceControll…...

敏捷迭代实战经验分享

一、敏捷迭代团队成员构成 比较高效的敏捷开发团队人员一般保持在7~10人左右,一般一个完整的敏捷迭代团队包含PM、BA、开发、测试、设计5类角色成员,由于不同项目的现状不同,可根据现实情况配置相应角色。 图:项目核心团队角色 二、敏捷实践活动 敏捷迭代的周期可以根据各…...

《从底层逻辑剖析:分布式软总线与传统计算机硬件总线的深度对话》

在科技飞速发展的当下&#xff0c;我们正见证着计算机技术领域的深刻变革。计算机总线作为信息传输的关键枢纽&#xff0c;其发展历程承载着技术演进的脉络。从传统计算机硬件总线到如今备受瞩目的分布式软总线&#xff0c;每一次的变革都为计算机系统性能与应用拓展带来了质的…...

服务器运维ACL访问控制列表如何配置

ACL(访问控制列表)在服务器运维中用于细粒度地控制用户或主机对资源的访问权限。正确配置ACL能有效限制未授权访问&#xff0c;增强系统安全性。以下是ACL的基本配置流程及示例&#xff0c;主要以Linux系统为例进行说明。 一、启用ACL支持 1. 检查文件系统是否支持ACL tune2fs …...

PIXOR:基于LiDAR的3D检测模型解析

目录 1、前言 2、PIXOR介绍 2.1. 什么是PIXOR&#xff1f; 2.2. PIXOR如何工作&#xff1f; 3、表现和应用 3.1、PIXOR的性能表现 3.2、PIXOR的应用场景 3.3、PIXOR的局限性与挑战 4. PIXOR的未来展望 5. 结语 1、前言 自动驾驶技术正以前所未有的速度发展&#xff…...

【OSG学习笔记】Day 2: 场景图(Scene Graph)的核心概念

今天课程分为两部分&#xff0c;第一部分我们学习一下Scene Graph理论知识&#xff0c;第二部分我们熟悉下OSG的源码。 第一部分&#xff08;Scene Graph&#xff09; 在OpenSceneGraph中&#xff0c;场景图&#xff08;Scene Graph&#xff09;通过树状层级结构高效管理3D对…...

虚幻5的C++调试踩坑

本地调试VS附加调试 踩坑1 预编译版本的UE5没有符号文件&#xff0c;无法调试源码 官方代码调试所需要的符号文件bdp需要下载导入。我安装的5.5.4是预编译版本&#xff0c;并非ue5源码。所以不含bdp文件。需要调试官方代码则需要通过EPIC中下载安装。右键UE版本&#xff0c;打…...

【软件测试】自动化测试框架Pytest + Selenium的使用

Pytest Selenium 是一种常见的自动化测试框架组合&#xff0c;用于编写和执行 Web 应用程序的自动化测试。Pytest 是一个强大的 Python 测试框架&#xff0c;而 Selenium 是一个用于浏览器自动化的工具&#xff0c;二者结合使用可以高效地进行 Web 应用的功能测试、UI 测试等。…...

蓝桥杯补题

方法技巧&#xff1a; 1.进行循环暴力骗分&#xff0c;然后每一层的初始进行判断&#xff0c;如果已经不满足题意了&#xff0c;那么久直接continue&#xff0c;后面的循环就不用浪费时间了。我们可以把题目所给的等式&#xff0c;比如说有四个未知量&#xff0c;那么我们可以用…...

2025年港口危货储存单位主要安全管理人员备考练习题

港口危货储存单位主要安全管理人员备考练习题&#xff1a; 单选题 1、依据《安全生产法》&#xff0c;危险物品的生产、储存单位的安全生产管理人员的任免&#xff0c;应当告知&#xff08; &#xff09;。 A. 主管的负有安全生产监督管理职责的部门 B. 当地人民政府 C. 行…...

openEuler欧拉系统配置local的yum源

1.下载iso openEuler | 开源社区 | openEuler社区官网 2.上传openEuler镜像文件至服务器&#xff08;例如上传至/home目录&#xff09; 3.创建挂载目录 #mkdir -p /mount/iso 4.镜像挂载 #mount -o loop /home/openEuler-22.03-LTS-x86_64-dvd.iso&#xff08;镜像上传目…...

AI比人脑更强,因为被植入思维模型【52】福格行为模型

giszz的理解&#xff1a;重要公式&#xff0c;是BMAT&#xff0c;行为动机能力触发点。也许是乘以。这个挺深刻的&#xff0c;在产品设计中&#xff0c;界面交互&#xff0c;都可以用到这样的思维模型。 一、定义 福格行为模型&#xff08;Fogg Behavior Model&#xff09;是由…...

DocLayout-YOLO:通过多样化合成数据与全局-局部感知实现文档布局分析突破

论文地址:https://arxiv.org/pdf/2410.12628 目录 一、论文概览:当YOLO遇见文档分析 二、创新点解析:两大核心技术 创新点1:Mesh-candidate BestFit合成算法 创新点2:全局-局部可控感知模块(GL-CRM) 三、实验结果:全面超越SOTA 主要指标对比(D4LA数据集) 消融…...

栈(算法)

在 C 里&#xff0c;栈是一种遵循后进先出&#xff08;LIFO&#xff09;原则的数据结构。下面从多个方面为你介绍 C 栈&#xff1a; 1. 使用标准库中的std::stack C 标准库提供了std::stack容器适配器&#xff0c;能方便地实现栈的功能。以下是简单示例&#xff1a; cpp #in…...

leetcode每日一题:子数组异或查询

引言 今天的每日一题原题是3375. 使数组的值全部为 K 的最少操作次数&#xff0c;比较水&#xff0c;可以分成2种情况&#xff1a; 存在比k更小的数&#xff0c;由于每次操作只能使得部分数变小&#xff0c;但是不能把任何数变大&#xff0c;所以肯定无法达成 不存在比k更小的…...

openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1

openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1 一、概述二、安装依赖1、安装 pcre、pcre-devel2、安装 zlib、zlib-devel3、安装 make、gcc、gcc-c3、编译 openssl5、安装 libtool6、编译 pcre-8.45 三、下载编译 nginx四、运行 nginx 一、概述 本文档适用于无法…...

使用Alamofire下载网站首页内容

用Alamofire库写一个下载网站首页内容的Swift代码。首先&#xff0c;我需要确认用户的需求。他们可能是在开发一个iOS应用&#xff0c;需要从某个网站获取首页的数据&#xff0c;比如HTML内容或者API数据。Alamofire是一个常用的Swift网络库&#xff0c;基于URLSession&#xf…...

服务器DNS失效

服务器异常 xx.t.RequestException: java.net.UnknownHostException: test.ac.xxxx.cn现象分析 本地测试正常&#xff0c;说明域名本身无问题。服务器 DNS 解析异常&#xff0c;导致 UnknownHostException。**服务器可正常解析 ****baidu.com**&#xff0c;说明网络正常&#…...

#无类域间路由(快速复习版)

判断两个无类&#xff08;CIDR&#xff09;地址是否属于同一个子网 &#x1f3af; 问题本质&#xff1a; 判断两个 IP 地址是否属于同一个子网&#xff0c;其实就是 对比它们的“网络地址”是否相同。 &#x1f50d; 原理步骤&#xff08;通用方法&#xff09; 我们按步骤来判…...

【Linux】jumpserver开源堡垒机部署

JumpServer 安装部署指南 本文档详细记录了 JumpServer 安装部署的过程、核心脚本功能说明以及后续管理使用提示&#xff0c;方便运维人员快速查阅和二次安装。 1. 前提条件 操作系统要求&#xff1a; 仅支持 Linux 系统&#xff0c;不支持 Darwin&#xff08;macOS&#xff0…...

Memcached缓存系统:从部署到实战应用指南

#作者&#xff1a;猎人 文章目录 一、安装libevent二、安装配置memcached三、安装Memcache的PHP扩展四、使用libmemcached的客户端工具五、Nginx整合memcached:六、php将会话保存至memcached Memcached是一款开源、高性能、分布式内存对象缓存系统&#xff0c;可应用各种需要缓…...

【rdma tx data flow问题】

rdma data flow问题 1 SQ_doorbell如何产生&#xff1f; --RDMA网卡doorbell寄存器触发&#xff1b;2 CPU如何访问网卡的Doorbell寄存器&#xff1f;3 为什么需要roce_qid_convert把local_qid转换成global_qid;4.WQE的format是什么&#xff1f;5.WQE在网卡硬件中的处理流程&…...

Vue 框架组件间通信方式

组件间通信方式 不管是 vue2 还是 vue3&#xff0c;组件通信方式很重要&#xff0c;以下是常见的几种通信方式&#xff1a; props&#xff1a;可以实现父子组件、子父组件、甚至兄弟组件通信自定义事件&#xff1a;可以实现子父组件通信全局事件总线 $bus&#xff1a;可以实现…...

React 第三十节 使用 useState 和 useEffect Hook实现购物车

不使用 redux 实现 购物车案例 使用 React 自带的 useState 和 useEffect Hook 即可实现购物车 export default function ShoppingCar() {// 要结算的商品 总数 以及总价const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…...

卷积神经网络CNN

目录 一、图像基础知识 图像基本概念 图像的加载 二、CNN概述 CNN概述 三、卷积层 卷积计算 Padding Stride 多通道卷积计算 PyTorch卷积层API 四、池化层 池化层计算 Stride Padding 多通道池化层计算 PyTorch 池化 API 五、图像分类案例 CIFAR10 数据集 …...