std::ranges::set_intersection set_union set_difference set_symmetric_difference
std::ranges::set_intersection:是 C++20 引入的一个算法,用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。
std::ranges::set_intersection
用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。
注意事项
- 输入范围必须已排序。
- 目标范围必须有足够空间存储交集结果。
- 交集结果默认按升序排列。
- 若元素重复,交集次数取两范围中较小的重复次数(例如
a = [2, 2, 3]
,b = [2, 2, 2]
,则交集为[2, 2]
)。
### 语法
Defined in header | ||
Call signature | ||
template< std::input_iterator I1, std::sentinel_for<I1> S1, std::input_iterator I2, std::sentinel_for<I2> S2, | (1) | (since C++20) |
template< ranges::input_range R1, ranges::input_range R2, std::weakly_incrementable O, class Comp = ranges::less, | (2) | (since C++20) |
Helper types | ||
template< class I1, class I2, class O > | (3) | (since C++20) |
### 参数
- `r1` 和 `r2`:输入范围,必须是已排序的。
- `result`:输出迭代器,指向存储交集元素的位置。
- `comp`:比较函数对象,用于比较元素。
- `proj1` 和 `proj2`:投影函数对象,用于投影元素。
### 返回值
返回一个 `ranges::set_intersection_result` 结构,包含两个输入范围的结束迭代器和输出范围的结束迭代器。
### 示例
以下是一个使用 `std::ranges::set_intersection` 的示例:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>void print(const auto& v, const auto& rem)
{std::cout << "{ ";for (const auto& e : v)std::cout << e << ' ';std::cout << '}' << rem;
}int main()
{const auto in1 = {1, 2, 2, 3, 4, 5, 6};const auto in2 = {2, 2, 3, 3, 5, 7};std::vector<int> out {};std::ranges::set_intersection(in1, in2, std::back_inserter(out));print(in1, " ∩ "), print(in2, " = "), print(out, "\n");
}
Output:
{ 1 2 2 3 4 5 6 } ∩ { 2 2 3 3 5 7 } = { 2 2 3 5 }
在这个示例中,`in1` 和 `in2` 是两个已排序的整数向量。`std::ranges::set_intersection` 计算它们的交集,并将结果存储在 `out` 向量中。最后,程序输出交集元素。
示例 2:自定义比较和投影
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>struct Person {std::string name;int age;
};int main() {std::vector<Person> a = {{"Alice", 20}, {"Bob", 25}, {"Charlie", 30}};std::vector<Person> b = {{"Bob", 25}, {"David", 28}, {"Eve", 30}};std::vector<Person> out;// 按 age 字段比较,计算交集std::ranges::set_intersection(a, b,std::back_inserter(out),[](int age1, int age2) { return age1 < age2; }, // 比较函数&Person::age, // 对 a 的投影:提取 age&Person::age // 对 b 的投影:提取 age);// 输出结果:Bob(25), Charlie(30)for (const auto& p : out) {std::cout << p.name << "(" << p.age << ") ";}
}
更多请了解:https://en.cppreference.com/w/cpp/algorithm/ranges/set_intersection
std::ranges::set_union
std::ranges::set_union
是 C++20 引入的算法,用于合并两个已排序范围的并集,并将结果写入目标范围。
Defined in header | ||
Call signature | ||
template< std::input_iterator I1, std::sentinel_for<I1> S1, std::input_iterator I2, std::sentinel_for<I2> S2, | (1) | (since C++20) |
template< ranges::input_range R1, ranges::input_range R2, std::weakly_incrementable O, class Comp = ranges::less, |
参数说明
first1
,last1
:第一个输入范围的起止迭代器。first2
,last2
:第二个输入范围的起止迭代器。result
:目标范围的起始迭代器。comp
:比较函数(默认为std::ranges::less
)。proj1
,proj2
:对输入元素的投影函数(默认为std::identity
)。
要求
- 输入范围必须按
comp
定义的顺序排序。 - 目标范围必须有足够空间存储并集结果。
- 重复元素处理:
- 若元素在某个范围中重复出现,并集会保留所有重复项(但不会跨范围合并)。
- 例如:
a = [2, 2, 3]
,b = [2, 2, 2]
,并集为[2, 2, 2, 3]
。
- 目标空间:需确保目标范围有足够空间,或使用
std::back_inserter
动态扩展。 - 性能:时间复杂度为线性(最多
2*(N1 + N2) - 1
次比较,其中N1
和N2
为输入范围长度)。
返回值
返回指向目标范围末尾的迭代器
示例
示例 1:基本用法
#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>int main() {std::vector<int> a = {1, 2, 3, 4, 5};std::vector<int> b = {3, 4, 5, 6, 7};std::vector<int> out;// 计算并集std::ranges::set_union(a, b, std::back_inserter(out));// 输出结果:1 2 3 4 5 6 7for (int x : out) {std::cout << x << " ";}
}
输出结果:
1 2 3 4 5 6 7
示例 2:自定义比较和投影
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>struct Person {std::string name;int age;
};int main() {std::vector<Person> a = {{"Alice", 20}, {"Bob", 25}, {"Charlie", 30}};std::vector<Person> b = {{"Bob", 26}, {"David", 28}, {"Eve", 30}};std::vector<Person> out;// 按 age 字段比较,计算并集std::ranges::set_union(a, b,std::back_inserter(out),[](int age1, int age2) { return age1 < age2; }, // 比较函数&Person::age, // 对 a 的投影:提取 age&Person::age // 对 b 的投影:提取 age);// 输出结果:Alice(20), Bob(25), Charlie(30), David(28), Eve(30)for (const auto& p : out) {std::cout << p.name << "(" << p.age << ") ";}
}
输出结果:
Alice(20) Bob(25) Bob(26) David(28) Charlie(30)
与传统 std::set_union
的区别
- 范围支持:直接接受范围参数(如
std::ranges::set_union(a, b, ...)
),而非迭代器对。 - 投影功能:允许通过
proj1
和proj2
对输入元素进行变换后再比较。 - 约束检查:通过 C++20 概念明确约束参数类型,增强类型安全。
更多信息:
https://en.cppreference.com/w/cpp/algorithm/ranges/set_union
std::ranges::set_difference
Defined in header | ||
Call signature | ||
template< std::input_iterator I1, std::sentinel_for<I1> S1, std::input_iterator I2, std::sentinel_for<I2> S2, | (1) | (since C++20) |
template< ranges::input_range R1, ranges::input_range R2, std::weakly_incrementable O, class Comp = ranges::less, |
std::ranges::set_difference
是 C++20 引入的算法,用于计算两个已排序范围的差集(即存在于第一个范围但不在第二个范围中的元素),并将结果写入目标范围。它是传统 std::set_difference
的范围适配版本,支持投影和直接使用范围参数。
参数说明
first1
,last1
:第一个输入范围的起止迭代器(要计算差集的主范围)。first2
,last2
:第二个输入范围的起止迭代器(被减的范围)。result
:目标范围的起始迭代器。comp
:比较函数(默认为std::ranges::less
)。proj1
,proj2
:对输入元素的投影函数(默认为std::identity
)。
要求
- 两个输入范围必须按
comp
定义的顺序排序。 - 目标空间:需确保目标范围有足够空间,或使用
std::back_inserter
动态扩展。 - 重复元素处理:
- 若元素在第一个范围中出现
m
次,在第二个范围中出现n
次,则差集中保留max(m - n, 0)
次。 - 例如:
a = [2, 2, 3]
,b = [2]
,差集为[2, 3]
。
- 若元素在第一个范围中出现
- 性能:时间复杂度为线性(最多
2*(N1 + N2) - 1
次比较,其中N1
和N2
为输入范围长度)。
示例
示例 1:基本用法
#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>int main() {std::vector<int> a = {1, 2, 3, 4, 5};std::vector<int> b = {3, 4, 5, 6, 7};std::vector<int> out;// 计算差集:a 中存在但 b 中不存在的元素std::ranges::set_difference(a, b, std::back_inserter(out));// 输出结果:1 2for (int x : out) {std::cout << x << " ";}
}
输出结果:
1 2
示例 2:自定义比较和投影
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>struct Person {std::string name;int age;
};int main() {std::vector<Person> a = {{"Alice", 20}, {"Bob", 25}, {"Charlie", 30}};std::vector<Person> b = {{"Bob", 26}, {"David", 28}, {"Eve", 30}};std::vector<Person> out;// 按 age 字段比较,计算差集(a 中存在但 b 中不存在的元素)std::ranges::set_difference(a, b,std::back_inserter(out),[](int age1, int age2) { return age1 < age2; }, // 比较函数&Person::age, // 对 a 的投影:提取 age&Person::age // 对 b 的投影:提取 age);// 输出结果:Alice(20) Bob(25) for (const auto& p : out) {std::cout << p.name << "(" << p.age << ") ";}
}
输出结果:
Alice(20) Bob(25)
与传统 std::set_difference
的区别
- 范围支持:直接接受范围参数(如
std::ranges::set_difference(a, b, ...)
)。 - 投影功能:允许通过
proj1
和proj2
对输入元素进行变换后再比较。 - 约束检查:通过 C++20 概念明确约束参数类型,增强类型安全。
std::ranges::set_symmetric_difference
std::ranges::set_symmetric_difference
是 C++20 中引入的算法,用于计算两个有序范围的对称差集,即存在于任一输入范围但不同时存在于两个范围中的元素。结果会写入输出范围,且保持有序。
函数原型
Defined in header | ||
Call signature | ||
template< std::input_iterator I1, std::sentinel_for<I1> S1, std::input_iterator I2, std::sentinel_for<I2> S2, | (1) | (since C++20) |
template< ranges::input_range R1, ranges::input_range R2, std::weakly_incrementable O, class Comp = ranges::less, |
参数说明
first1, last1
: 第一个输入范围的迭代器对。first2, last2
: 第二个输入范围的迭代器对。result
: 输出范围的起始迭代器。comp
: 比较函数(默认为std::ranges::less
)。proj1, proj2
: 应用于输入元素的投影(默认为std::identity
)。
使用条件
- 输入范围必须已按升序排列。
- 输出范围不能与输入范围重叠。
示例
#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>int main() {std::vector<int> v1 = {1, 2, 4, 5, 6};std::vector<int> v2 = {2, 3, 5, 7};std::vector<int> out;std::ranges::set_symmetric_difference(v1, v2, std::back_inserter(out));// 输出结果for (int n : out) {std::cout << n << ' ';}
}
输出:
1 3 4 6 7
步骤解析
- 输入准备:
v1
和v2
必须有序。 - 算法执行:
- 比较
v1
和v2
的当前元素。 - 将较小元素写入
out
,移动对应迭代器。 - 若元素相等,则跳过,同时移动两个迭代器。
- 比较
- 结果:
out
包含对称差集元素,保持有序。
自定义比较和投影
// 使用自定义比较函数(按降序)
std::ranges::set_symmetric_difference(v1 | std::views::reverse,v2 | std::views::reverse,std::back_inserter(out),std::greater{}
);// 使用投影(如比较字符串长度)
std::vector<std::string> s1 = {"apple", "banana", "cherry"};
std::vector<std::string> s2 = {"grape", "kiwi", "orange"};
std::ranges::set_symmetric_difference(s1, s2, std::back_inserter(out_str),[](int a, int b) { return a < b; },[](const std::string& s) { return s.length(); },[](const std::string& s) { return s.length(); }
);
总结
std::ranges::set_symmetric_difference
高效计算两个有序范围的对称差集,时间复杂度为 (O(N+M)),空间复杂度为 (O(1))(不计输出)。需确保输入有序且输出范围足够大。
相关文章:
std::ranges::set_intersection set_union set_difference set_symmetric_difference
std::ranges::set_intersection:是 C20 引入的一个算法,用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。 std::ranges::set_intersection 用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。 注意事项…...
消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心
在现代分布式系统和微服务架构的构建中,消息中间件作为一个不可或缺的组件,承担着系统间解耦、异步处理、流量削峰、数据传输等重要职能。尤其是在面临大规模并发、高可用性和可扩展性需求时,如何选择合适的消息中间件成为了开发者和架构师们…...
笔试题笔记#6 模拟三道题和总结知识
两小时快乐模拟,最终三百分耻辱下播,(刷的题三道一组,时长两小时,第一题100分,第二题200分,第三题300分),第三题完全想错了,其实挺简单的,就是好久…...
生成对抗网络(GAN)的“对抗“过程解析:从图像合成到药物发现的跨领域应用
技术原理(数学公式示意图) 核心对抗公式 min G max D V ( D , G ) E x ∼ p d a t a [ log D ( x ) ] E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D,G) \mathbb{E}_{x\sim p_{data}}[\log D(x)] \mathbb{E}_{z\sim p_…...
[鸿蒙笔记-基础篇_自定义构建函数及自定义公共样式]
在开发中遇到比较复杂的界面的时候都会用到自定义组件,但是在自定义组件内部也会有一些公共的布局及公共的样式,这时就需要用到自定义构建函数和自定义构建样式。说白了就是:在ets文件中进行构建函数和构建样式的抽取封装。比较常用记录一下。…...
【C】初阶数据结构4 -- 双向循环链表
之前学习的单链表相比于顺序表来说,就是其头插和头删的时间复杂度很低,仅为O(1) 且无需扩容;但是对于尾插和尾删来说,由于其需要从首节点开始遍历找到尾节点,所以其复杂度为O(n)。那么有没有一种结构是能使得头插和头删…...
【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】
需求说明 软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…...
解读 Flink Source 接口重构后的 KafkaSource
前言 Apache Kafka 和 Apache Flink 的结合,为构建实时流处理应用提供了一套强大的解决方案[1]。Kafka 作为高吞吐量、低延迟的分布式消息队列,负责数据的采集、缓冲和分发;而 Flink 则是功能强大的流处理引擎,负责对数据进行实时…...
一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记
时间轴呈现事故进程 17:00:开发人员小李正在尝试利用 Python 爬虫从企查查(https://www.qcc.com)抓取公司工商信息。原本一切正常,但突然发现信息采集失败,程序抛出大量选择器错误。17:15:小李发现&#x…...
代码随想录刷题攻略---动态规划---子序列问题1---子序列
子序列(不连续)和子序列(连续)的问题 例题1: 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的…...
QEMU 搭建arm linux开发环境
Qemu 作为一款强大的开源虚拟化软件,为我们提供了一个便捷且经济实惠的方式来模拟各种硬件环境,从而在上面安装和学习 Linux 系统。本文将详细介绍如何使用 Qemu 搭建 Linux 学习环境, 环境准备 操作系统:建议使用 Ubuntu 20.04…...
PyQt组态软件 拖拽设计界面测试
PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件,目前实现的功能如下: 支持拖入控件,鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器,修改当前选中控件的属性 拖动框选控件,点选控件 控…...
JAVA泛型介绍与举例
Java中,泛型用于编译阶段限制集合中元素的类型,或者限制类中某个属性的类型,编译过程中发生类型擦除,最终还是Object类型。 1. 集合中的泛型 集合默认可以存储任何类型的元素,即Object类型,当使用一个集合…...
JavaScript 内置对象-Math对象
在JavaScript中,Math 对象提供了一系列与数学相关的静态方法和属性,帮助开发者执行复杂的计算任务。无论是简单的算术运算还是高级的几何、统计计算,Math 对象都能提供强大的支持。本文将详细介绍 Math 对象的主要功能及其使用方法。 一、简…...
Ubuntu 22.04 Desktop企业级基础配置操作指南
一、网络配置 cd /etc/netplan vi 00-installer-config.yaml 设置如下所示: network:version: 2ethernets:eth0: # 替换为你的实际网络接口名称,如 ens33, enp0s3 等dhcp4: noaddresses:- 192.168.1.100/24 # 静态IP地址和子网掩码gateway4: 192.16…...
UE_C++ —— UObject Instance Creation
目录 一,UObject Instance Creation NewObject NewNamedObject ConstructObject Object Flags 二,Unreal Object Handling Automatic Property Initialization Automatic Updating of References Serialization Updating of Property Values …...
WPF的MVVMLight框架
在NuGet中引入该库: MVVMLight框架中的命令模式的使用: <StackPanel><TextBox Text"{Binding Name}"/><TextBox Text"{Binding Title}"/><Button Content"点我" Command"{Binding ShowCommand…...
【云安全】云原生- K8S kubeconfig 文件泄露
什么是 kubeconfig 文件? kubeconfig 文件是 Kubernetes 的配置文件,用于存储集群的访问凭证、API Server 的地址和认证信息,允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置,支持通过上下文&am…...
binance python
binance-futures-connector 4.1.0 from binance.um_futures import UMFutures # U本位 USDT-M Futures /fapi/* # 币本位 COIN-M Delivery /dapi/* proxies { https: http://localhost:7890 } client UMFutures(proxiesproxies)apiKey"" apiSecret"" cl…...
LLaMA-Factory DeepSeek-R1 模型 微调基础教程
LLaMA-Factory 模型 微调基础教程 LLaMA-FactoryLLaMA-Factory 下载 AnacondaAnaconda 环境创建软硬件依赖 详情LLaMA-Factory 依赖安装CUDA 安装量化 BitsAndBytes 安装可视化微调启动 数据集准备所需工具下载使用教程所需数据合并数据集预处理 DeepSeek-R1 可视化微调数据集处…...
利用亚马逊云科技RDS for SQL Server配置向量数据存储
生成式人工智能(AI)正迎来又一个快速发展期,引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由…...
ASP.NET Core SixLabors.ImageSharp v1.0 的图像实用程序类 web示例
这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包(版本 1.0.4)添加到.NET Core 3.1/ .NET 6 / .NET 8项目中。它与Windows、Linux和 MacOS兼容。 这已针对 ImageSharp v3.0.1 进行了重新设计。 它可以根据百万像素数或长度乘以宽度来调整图像大…...
JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略
文章目录 1. 类加载检查2. 内存分配① 指针碰撞② 空闲列表线程安全问题: 3. 内存空间初始化4. 对象头设置5. 对象初始化 当Java虚拟机遇到一条 new指令时,会执行以下步骤来创建对象: 1. 类加载检查 首先检查new指令的参数是否能在常量池中…...
SpringCloud框架下的注册中心比较:Eureka与Consul的实战解析
摘要 在探讨SpringCloud框架中的两种注册中心之前,有必要回顾单体架构与分布式架构的特点。单体架构将所有业务功能集成在一个项目中,优点是架构简单、部署成本低,但耦合度高。分布式架构则根据业务功能对系统进行拆分,每个模块作…...
应对DeepSeek总是服务器繁忙的解决方法
最近由于访问量过大,DeepSeek服务器官网经常弹出:“服务器繁忙,请稍后再试”的提示,直接卡成PPT怎么办?服务器繁忙直接看到视觉疲劳: 解决DeepSeek卡顿问题 DeepSeek使用卡顿问题,是因为访问量…...
C++ 实践扩展(Qt Creator 联动 Visual Studio 2022)
这里我们将在 VS 上实现 QT 编程,实现如下: 一、Vs 2022 配置(若已安装,可直接跳过) 点击链接:Visual Studio 2022 我们先去 Vs 官网下载,如下: 等待程序安装完成之…...
JENKINS(全面)
一.linux系统中JENKINS的安装 注意:安装jenkins需要安装jdk,而且具体版本的jenkins有相对应的jdk版本。可参考以下链接。 Redhat Jenkins 软件包https://pkg.jenkins.io/redhat-stable/https://pkg.jenkins.io/redhat-stable/https://pkg.jenkins.io/r…...
72.git指南(简单)
Git 操作指南 在开始之前,请确保你已经提前配置好 .gitignore 文件,以避免不必要的文件被 Git 跟踪。如果在初始化仓库后再配置 .gitignore 文件,之前添加的文件仍会被跟踪,需要手动移除。 如下例子忽略了文件夹及文件夹内所有内…...
LeetCode 232: 用栈实现队列
LeetCode 232: 用栈实现队列 题目描述 使用栈实现队列的操作。支持以下操作: MyQueue():初始化队列。push(x):将元素 x 推入队列。pop():从队列中移除元素。peek():返回队列头部的元素。empty():检查队列…...
C#关于静态关键词static详解
Demo代码: public class HomeController : Controller {private DateTime time1 DateTime.Now; // 实例字段private static DateTime time2 DateTime.Now; // 静态字段[HttpGet("index")]public async Task Index(){Console.WriteLine($"now&am…...
【Pico】使用Pico进行无线串流搜索不到电脑
使用Pico进行无线串流搜索不到电脑 官串方式:使用Pico互联连接电脑。 故障排查 以下来自官方文档 请按照以下步骡排除故障: 确认电脑和一体机连接了相同的路由器WiFi网络(相同网段) IP地址通常为192.168.XX,若两设备的IP地址前三段相同&…...
细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法
目录 一、RTC基础知识 1、 RTC的功能 2、RTC工作原理 (1)RTC的时钟信号源 (2)预分频器 (3)实时时钟和日历数据 (4)周期性自动唤醒 (5)可编程闹钟 &a…...
ES用脚本更新异常
因为需要向原有的es结构中增加一个检索字段,但因为历史es数据都没有该字段,需要批量刷新es的该字段,本地使用了脚本的方式进行刷新,在测试环境测试,出现了以下错误: 500 Internal Server Error: [{"e…...
Navicat导入海量Excel数据到数据库(简易介绍)
目录 前言正文 前言 此处主要作为科普帖进行记录 原先Java处理海量数据的导入时,由于接口超时,数据处理不过来,后续转为Navicat Navicat 是一款功能强大的数据库管理工具,支持多种数据库系统(如 MySQL、PostgreSQL、…...
C++学习
C对C语言的加强 1.命名空间(namespace) 为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C库时,这些标识符的命名发送冲突。 标准C引入了关键字namespace,可以更好地控制标识符的作用域。 st…...
Linux Mem -- Where the mte store and check in the real hardware platform
目录 1 前言 2 MTE tag分类 3 Address tag 4 Memory tag 5 Tag Check 6 Cortex-A710 和 CI-700 系统示例: 1 前言 ARM的MTE允许分配、设置、比较一个 4bit的allocation tag 为16字节粒度的物理地址。当对MTE有一定了解后,应该会产生如下疑问&#…...
老牌软件,如今依旧坚挺
今天给大家介绍一个非常好用的老牌电脑清理软件,这个软件好多年之前就有人使用了。 今天找出来之后,发现还是那么的好用,功能非常强大。 Red Button 电脑清理软件 软件是绿色版,无需安装,打开这个图标就能直接使用了…...
springboot整合modbus实现通讯
springboot整合modbus4j实现tcp通讯 前言 本文基于springboot和modbus4j进行简单封装,达到开箱即用的目的,目前本方案仅实现了tcp通讯。代码会放在最后,按照使用方法操作后就可以直接使用 介绍 在使用本方案之前,有必要对modb…...
【java面试】线程篇
1.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 2.线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任…...
DeepSeek官方发布R1模型推荐设置
今年以来,DeepSeek便在AI领域独占鳌头,热度一骑绝尘。其官方App更是创造了惊人纪录,成为史上最快突破3000万日活的应用,这一成绩无疑彰显了它在大众中的超高人气与强大吸引力。一时间,各大AI及云服务厂商纷纷投身其中&…...
Vue CLI 配置与插件
Vue CLI 配置与插件 今天我们来聊聊 Vue CLI 的配置与插件。随着项目复杂度的增加,合理配置 Vue CLI 可以帮助我们更高效地管理项目,同时利用插件机制快速集成各种功能。下面我就和大家详细介绍如何配置 Vue CLI,以及如何使用和开发插件&…...
Spring Boot (maven)分页3.0版本 通用版
前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…...
pip 与 conda 的故事
pip 换源 pip 官方源 -i https://pypi.python.org/simple pip 清华源 -i https://pypi.tuna.tsinghua.edu.cn/simple pip 阿里源 -i https://mirrors.aliyun.com/pypi/simple PyTorch 安装 pip3 install torch torchvision torchaudio pip3 install torch torchvision torchaud…...
清华大学KVCache.AI团队联合趋境科技联合的KTransformers开源项目为什么那么厉害
KTransformers是一个由清华大学KVAV.AI团队开发的开源项目,旨在优化大语言模型(LLM)的推理性能,特别是在有限显存资源下运行大型模型。以下是KTransformers的详细介绍: 1. 核心特点 高性能优化:KTransfor…...
DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”_deepseek ddos
当算力博弈升级为网络战争:拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下,网络已然成为人类社会运转的关键基础设施,深刻融入经济、生活、政务等各个领域。从金融交易的实时清算…...
4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享
引言: 最近,DeepSeek-R1在完全开源的背景下,与OpenAI的O1推理模型展开了激烈竞争,引发了广泛关注。为了让更多本地用户能够运行DeepSeek,我们成功将R1 671B参数模型从720GB压缩至131GB,减少了80%ÿ…...
【动态路由】系统Web URL资源整合系列(后端技术实现)【apisix实现】
需求说明 软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…...
【Elasticsearch】通过运行时字段在查询阶段动态覆盖索引字段
在 Elasticsearch 中,Override field values at query time是指通过运行时字段(runtime fields)在查询阶段动态覆盖索引字段的值,而无需修改原始索引数据。这种功能特别适用于以下场景: 1. 动态修改字段值:…...
【stm32】定时器
stm32f4xx: APB2 ----> TIM1,TIM8,TIM9,TIM10,TIM11 APB1 ----> TIM2,TIM3,TIM4,TIM5,TIM6,TIM7,TIM12,TIM13,TIM14 一、定时器介绍 1、基本定时器 1.1、TIM6 和 TIM7 的主要特性 ● 16 位自动重载递增计数器 ● 16 位可编程…...
滑动窗口算法篇:连续子区间与子串问题
1.滑动窗口原理 那么一谈到子区间的问题,我们可能会想到我们可以用我们的前缀和来应用子区间问题,但是这里对于子区间乃至子串问题,我们也可以尝试往滑动窗口的思路方向去进行一个尝试,那么说那么半天,滑动窗口是什么…...