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

C++23 中的 views::chunk:深入探索与应用

文章目录

    • 一、`views::chunk` 的背景与动机
    • 二、`views::chunk` 的基本用法
      • 语法与参数
      • 示例代码
    • 三、`views::chunk` 的高级用法
      • 处理不完整块
      • 与 `views::drop` 和 `views::take` 结合
    • 四、性能分析
    • 五、应用场景
      • 1. 批量处理数据
      • 2. 分页显示
      • 3. 并行处理
    • 六、与其他范围适配器的组合
      • 1. 与 `views::transform` 结合
      • 2. 与 `views::filter` 结合
    • 七、编译器支持
    • 八、总结

C++23 标准引入了许多令人兴奋的新特性,其中 views::chunk 是一个非常实用的范围适配器(range adapter)。它允许我们将一个范围划分为多个固定大小的子范围(块),这在处理大量数据时非常有用,可以显著提高代码的可读性和效率。本文将深入探讨 views::chunk 的实现原理、使用场景以及与其他范围适配器的组合应用。

一、views::chunk 的背景与动机

在 C++23 之前,处理范围分块通常需要手动编写代码,例如使用循环和索引。这种方法不仅繁琐,而且容易出错。为了简化这种操作,C++23 引入了 views::chunk,它基于 C++20 的范围库(Ranges Library)进行了扩展。

views::chunk 的设计目标是提供一种简洁、高效且类型安全的方式来对范围进行分块处理。它属于 C++23 的 P2442R1 提案的一部分,该提案旨在进一步完善 C++ 的范围库。

二、views::chunk 的基本用法

语法与参数

views::chunk 的基本语法如下:

auto chunked_range = range | std::views::chunk(chunk_size);
  • range 是要分块的范围,可以是数组、向量、链表等。
  • chunk_size 是每个块的大小,必须是正整数。

如果范围的大小不能被 chunk_size 整除,最后一个块的大小将小于 chunk_size

示例代码

以下是一个简单的示例,展示如何使用 views::chunk 将一个向量划分为多个固定大小的块:

#include <iostream>
#include <ranges>
#include <vector>
#include <fmt/ranges.h> // 使用 fmt 库进行格式化输出int main() {std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};auto chunked_range = v | std::views::chunk(3);for (const auto& chunk : chunked_range) {fmt::print("{}\n", chunk);}return 0;
}

输出结果如下:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

在这个例子中,views::chunk(3) 将向量 v 划分为多个大小为 3 的块。每个块都是一个子范围,可以直接迭代访问。

三、views::chunk 的高级用法

处理不完整块

当范围的大小不能被 chunk_size 整除时,最后一个块的大小将小于 chunk_size。这种不完整的块在某些场景下可能需要特殊处理。例如,我们可以使用 std::optional 来表示不完整的块:

#include <iostream>
#include <ranges>
#include <vector>
#include <optional>
#include <fmt/ranges.h> // 使用 fmt 库进行格式化输出int main() {std::vector<int> v = {1, 2, 3, 4, 5};auto chunked_range = v | std::views::chunk(3);for (const auto& chunk : chunked_range) {if (chunk.size() == 3) {fmt::print("Complete chunk: {}\n", chunk);} else {fmt::print("Incomplete chunk: {}\n", chunk);}}return 0;
}

输出结果如下:

Complete chunk: [1, 2, 3]
Incomplete chunk: [4, 5]

views::dropviews::take 结合

views::chunk 可以与其他范围适配器结合使用,以实现更复杂的数据处理逻辑。例如,我们可以使用 views::dropviews::take 来处理特定的块:

#include <iostream>
#include <ranges>
#include <vector>
#include <fmt/ranges.h> // 使用 fmt 库进行格式化输出int main() {std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};auto chunked_range = v | std::views::chunk(3);// 取第 2 个块(从 0 开始计数)auto second_chunk = chunked_range | std::views::drop(1) | std::views::take(1);for (const auto& chunk : second_chunk) {fmt::print("Second chunk: {}\n", chunk);}return 0;
}

输出结果如下:

Second chunk: [4, 5, 6]

在这个例子中,我们首先将向量 v 划分为多个大小为 3 的块,然后使用 views::drop(1) 跳过第一个块,再使用 views::take(1) 取出第二个块。

四、性能分析

views::chunk 的性能主要取决于范围的大小和块的大小。由于 views::chunk 是一个懒惰运算(lazy operation),它不会立即对整个范围进行分块,而是在迭代时按需生成每个块。这意味着 views::chunk 的时间和空间复杂度都非常低。

在实际应用中,views::chunk 的性能表现非常出色。例如,在处理大规模数据时,它可以显著减少内存占用,同时提高代码的执行效率。以下是一个简单的性能测试代码:

#include <chrono>
#include <iostream>
#include <ranges>
#include <vector>int main() {std::vector<int> v(1000000); // 创建一个包含 100 万个元素的向量for (size_t i = 0; i < v.size(); ++i) {v[i] = i;}auto start = std::chrono::high_resolution_clock::now();auto chunked_range = v | std::views::chunk(1000);for (const auto& chunk : chunked_range) {// 简单处理每个块int sum = 0;for (int num : chunk) {sum += num;}}auto end = std::chrono::high_resolution_clock::now();auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);std::cout << "Processing time: " << duration.count() << " ms\n";return 0;
}

在测试中,处理 100 万个元素的向量并将其划分为大小为 1000 的块,整个过程仅耗时几毫秒。这表明 views::chunk 在处理大规模数据时具有非常高的效率。

五、应用场景

1. 批量处理数据

在处理大量数据时,views::chunk 可以将数据分批处理,提高代码的可读性和效率。例如,在机器学习中,我们可以将数据集划分为多个小批次,然后对每个批次进行独立的训练。

#include <iostream>
#include <ranges>
#include <vector>
#include <fmt/ranges.h> // 使用 fmt 库进行格式化输出int main() {std::vector<int> dataset = {1, 2, 3, 4, 5, 6, 7, 8, 9};auto batch_size = 3;auto batches = dataset | std::views::chunk(batch_size);for (const auto& batch : batches) {fmt::print("Batch: {}\n", batch);// 对每个批次进行处理}return 0;
}

输出结果如下:

Batch: [1, 2, 3]
Batch: [4, 5, 6]
Batch: [7, 8, 9]

2. 分页显示

在实现分页功能时,views::chunk 可以方便地将数据划分为多个页面,每个页面包含固定数量的元素。例如,在一个网页应用中,我们可以将用户数据划分为多个页面,每个页面显示 10 条记录。

#include <iostream>
#include <ranges>
#include <vector>
#include <fmt/ranges.h> // 使用 fmt 库进行格式化输出int main() {std::vector<int> users = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};auto page_size = 4;auto pages = users | std::views::chunk(page_size);for (const auto& page : pages) {fmt::print("Page: {}\n", page);// 对每个页面进行处理}return 0;
}

输出结果如下:

Page: [1, 2, 3, 4]
Page: [5, 6, 7, 8]
Page: [9, 10, 11, 12]

3. 并行处理

views::chunk 还可以与并行算法结合使用,以实现高效的并行处理。例如,我们可以使用 std::for_each 的并行版本对每个块进行处理:

#include <execution>
#include <iostream>
#include <ranges>
#include <vector>
#include <fmt/ranges.h> // 使用 fmt 库进行格式化输出int main() {std::vector<int> data = {1, 2, 3, 4, 5, 6, 7, 8, 9};auto chunk_size = 3;auto chunked_range = data | std::views::chunk(chunk_size);std::for_each(std::execution::par, chunked_range.begin(), chunked_range.end(), [](const auto& chunk) {int sum = 0;for (int num : chunk) {sum += num;}fmt::print("Chunk sum: {}\n", sum);});return 0;
}

输出结果如下:

Chunk sum: 6
Chunk sum: 15
Chunk sum: 24

在这个例子中,我们使用 std::for_each 的并行版本对每个块进行处理,计算每个块的元素之和。

六、与其他范围适配器的组合

views::chunk 可以与其他范围适配器组合使用,以实现更复杂的功能。以下是一些常见的组合示例:

1. 与 views::transform 结合

我们可以将 views::chunkviews::transform 结合,对每个块进行转换。例如,我们可以计算每个块的元素之和:

#include <iostream>
#include <ranges>
#include <vector>
#include <fmt/ranges.h> // 使用 fmt 库进行格式化输出int main() {std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};auto chunk_size = 3;auto chunked_range = v | std::views::chunk(chunk_size);auto transformed_range = chunked_range | std::views::transform([](const auto& chunk) {return std::accumulate(chunk.begin(), chunk.end(), 0);});fmt::print("Chunk sums: {}\n", transformed_range);return 0;
}

输出结果如下:

Chunk sums: [6, 15, 24]

在这个例子中,我们首先将向量 v 划分为多个大小为 3 的块,然后对每个块使用 std::accumulate 计算其元素之和。

2. 与 views::filter 结合

我们还可以将 views::chunkviews::filter 结合,对块进行过滤。例如,我们可以过滤出元素之和大于某个阈值的块:

#include <iostream>
#include <ranges>
#include <vector>
#include <fmt/ranges.h> // 使用 fmt 库进行格式化输出int main() {std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};auto chunk_size = 3;auto threshold = 10;auto chunked_range = v | std::views::chunk(chunk_size);auto filtered_range = chunked_range | std::views::filter([threshold](const auto& chunk) {return std::accumulate(chunk.begin(), chunk.end(), 0) > threshold;});fmt::print("Filtered chunks: {}\n", filtered_range);return 0;
}

输出结果如下:

Filtered chunks: [[4, 5, 6], [7, 8, 9]]

在这个例子中,我们首先将向量 v 划分为多个大小为 3 的块,然后使用 std::accumulate 计算每个块的元素之和,并过滤出元素之和大于 10 的块。

七、编译器支持

截至 2023 年 5 月,views::chunk 已经得到了部分编译器的支持:

  • GCC:从 13 版本开始部分支持,14 版本完全支持。
  • Clang:从 19.33 版本开始支持。
  • MSVC:从 19.33 版本开始支持。

如果你正在使用这些编译器的最新版本,可以直接在项目中使用 views::chunk

八、总结

views::chunk 是 C++23 中的一个非常实用的范围适配器,它允许我们将一个范围划分为多个固定大小的子范围(块)。这在处理大量数据时非常有用,可以显著提高代码的可读性和效率。views::chunk 可以与其他范围适配器组合使用,以实现更复杂的功能。目前,views::chunk 已经得到了部分编译器的支持,我们可以开始在项目中使用它。

相关文章:

C++23 中的 views::chunk:深入探索与应用

文章目录 一、views::chunk 的背景与动机二、views::chunk 的基本用法语法与参数示例代码 三、views::chunk 的高级用法处理不完整块与 views::drop 和 views::take 结合 四、性能分析五、应用场景1. 批量处理数据2. 分页显示3. 并行处理 六、与其他范围适配器的组合1. 与 view…...

库室指静脉人脸门禁机 LK-BM-S10C/JR

1、采用大于等于四核处理器&#xff0c;主频大于1G&#xff1b; 2、内存≥4G DDR3&#xff1b;存储≥8G 3、核心模块采用国产工业级处理芯片和嵌入式Android实时多任务系统&#xff0c;采用模块化设计,模块间通过标准接口相连&#xff1b; 4、大于等于10英寸电容屏&#xf…...

低成本自动化改造的18个技术锚点深度解析

执行摘要 本文旨在深入剖析四项关键的低成本自动化技术&#xff0c;这些技术为工业转型提供了显著的运营和经济效益。文章将提供实用且深入的指导&#xff0c;涵盖老旧设备联网、AGV车队优化、空压机系统智能能耗管控以及此类项目投资回报率&#xff08;ROI&#xff09;的严谨…...

线程中常用的方法

知识点详细说明 Java线程的核心方法集中在Thread类和Object类中,以下是新增整合后的常用方法分类解析: 1. 线程生命周期控制 方法作用注意事项start()启动新线程,JVM调用run()方法多次调用会抛出IllegalThreadStateException(线程状态不可逆)。run()线程的任务逻辑直接调…...

运维体系架构规划

运维体系架构规划是一个系统性工程&#xff0c;旨在构建高效、稳定、安全的运维体系&#xff0c;保障业务系统的持续运行。下面从规划目标、核心模块、实施步骤等方面进行详细阐述&#xff1a; 一、规划目标 高可用性&#xff1a;确保业务系统 724 小时不间断运行&#xff0c…...

C++结构体介绍

结构体的定义 在C中&#xff0c;结构体&#xff08;struct&#xff09;是一种用户定义的数据类型&#xff0c;允许将不同类型的数据组合在一起。结构体的定义使用struct关键字&#xff0c;后跟结构体名称和一对花括号{}&#xff0c;花括号内包含成员变量的声明。 struct Pers…...

RoPE长度外推:外插内插

RoPE:假定 α \alpha α是定值 其中一半位置是用cos表示的 cos ⁡ ( k α − 2 i d ) \cos(k\alpha^{-\frac{2i}{d}}) cos(kα−d2i​)(另一半是sin)(d是词嵌入维度) 当太长如何解决: 1 直接不管—外插 缺点:超过一定长度性能急剧下降。(较大时&#xff0c;对应的很多位置编码…...

牛客练习赛138-题解

牛客练习赛138-题解 https://ac.nowcoder.com/acm/contest/109081#question A-小s的签到题 题目描述 给定一个比赛榜单&#xff1a; 第一行是 n 个不同的大写字母&#xff0c;代表题号第二行是 n 个形如a/b的字符串&#xff0c;表示每道题的通过人数和提交人数 找到通过人…...

MySQL高可用方案全攻略:选型指南与AI运维实践

MySQL高可用方案全攻略:选型指南与AI运维实践 引言:当数据库成为业务生命线 在数字化时代,数据库就是企业的"心脏"。一次数据库宕机可能导致: 电商网站每秒损失上万元订单游戏公司遭遇玩家大规模流失金融系统引发连锁反应本文将为你揭秘: MySQL主流高可用方案…...

【库(Library)、包(Package)和模块(Module)解析】

在Python中&#xff0c;**库&#xff08;Library&#xff09;、包&#xff08;Package&#xff09;和模块&#xff08;Module&#xff09;**是代码组织的不同层级&#xff0c;而import语句的导入行为与它们密切相关。以下是详细对比和解释&#xff1a; &#x1f4e6; 1. 核心概…...

记录一次使用thinkphp使用PhpSpreadsheet扩展导出数据,解决身份证号码等信息科学计数法问题处理

PhpSpreadsheet官网 PhpSpreadsheet安装 composer require phpoffice/phpspreadsheet使用composer安装时一定要下载php对应的版本&#xff0c;下载之前使用php -v检查当前php版本 简单使用 <?php require vendor/autoload.php;use PhpOffice\PhpSpreadsheet\Spreadshee…...

为什么业务总是被攻击?使用游戏盾解决方案

业务频繁遭受攻击的核心原因在于攻防资源不对等&#xff0c;攻击者利用技术漏洞、利益驱动及企业防护短板发起攻击&#xff0c;而游戏盾通过针对性架构设计实现高效防御。以下是具体分析与解决方案&#xff1a; ​​一、业务被攻击的根源​​ ​​利益驱动攻击​​ ​​勒索与数…...

4.1【LLaMA-Factory 实战】医疗领域大模型:从数据到部署的全流程实践

【LLaMA-Factory实战】医疗领域大模型&#xff1a;从数据到部署的全流程实践 一、引言 在医疗AI领域&#xff0c;构建专业的疾病诊断助手需要解决数据稀缺、知识专业性强、安全合规等多重挑战。本文基于LLaMA-Factory框架&#xff0c;详细介绍如何从0到1打造一个垂直领域的医…...

二维旋转矩阵:让图形动起来的数学魔法 ✨

大家好&#xff01;今天我们要聊一个超酷的数学工具——旋转矩阵。它就像数学中的"旋转魔法"&#xff0c;能让图形在平面上优雅地转圈圈。别被"矩阵"这个词吓到&#xff0c;其实它就是一个数字表格&#xff0c;但功能超级强大&#xff01; 一、什么是旋转…...

go语言封装、继承与多态:

1.封装&#xff1a; 封装是通过将数据和操作数据的方法绑定在一起来实现的。在Go语言中&#xff0c;封装通过结构体&#xff08;struct&#xff09;和方法&#xff08;method&#xff09;来实现。结构体的字段可以通过大小写来控制访问权限。 package stutype Person struct …...

golang -- 如何获取变量类型

目录 前言获取变量类型一、fmt.Printf二、类型断言三、类型选择四、反射 reflect.TypeOf五、reflect.Value的Type()方法 前言 在学习反射的时候&#xff0c;对reflect包中获取变量类型的函数很迷惑 比如下面这个 用Type获取变量类型的方法&#xff08;在下面提到&#xff09; …...

Missashe考研日记-day36(改版说明)

Missashe考研日记-day36 改版说明 经过一天的思考、纠结和尝试&#xff0c;博主决定对更新内容进行改版&#xff0c;如下&#xff1a;1.不再每天都发一篇日记&#xff0c;改为一周发一篇包含一周七天学习进度的周记&#xff0c;但为了标题和以前相同&#xff08;强迫症&#…...

opencv中的图像特征提取

图像的特征&#xff0c;一般是指图像所表达出的该图像的特有属性&#xff0c;其实就是事物的图像特征&#xff0c;由于图像获得的多样性&#xff08;拍摄器材、角度等&#xff09;&#xff0c;事物的图像特征有时并不特别突出或与无关物体混杂在一起&#xff0c;因此图像的特征…...

一文了解氨基酸的分类、代谢和应用

氨基酸&#xff08;Amino acids&#xff09;是在分子中含有氨基和羧基的一类化合物。氨基酸是生命的基石&#xff0c;人类所有的疾病与健康状况都与氨基酸有直接或间接的关系。氨基酸失衡可引起肝硬化、神经系统感染性疾病、糖尿病、免疫性疾病、心血管疾病、肾病、肿瘤等各类疾…...

Linux 系统安装Minio详细教程

一、&#x1f50d; MinIO 简介 MinIO 是一个高性能的对象存储服务&#xff0c;兼容 Amazon S3 接口&#xff0c;适用于大数据、AI、云原生等场景&#xff0c;支持分布式部署和高可用性&#xff0c;可作为轻量级的私有云对象存储解决方案。 二、&#x1f4e6; 安装准备 ✅ 系…...

排序算法-归并排序

归并排序是一种分治算法&#xff08;Divide and Conquer&#xff09;。对于给定的一组数据&#xff0c;利用递归与分治技术将数据序列划分成为越来越小的半子表&#xff0c;在对半子表排序后&#xff0c;再用递归方法将排好序的半子表合并成为越来越大的有序序列。 核心思想 分…...

js 两个数组中的指定参数(id)相同,为某个对象设置disabled属性

在JavaScript中&#xff0c;如果想要比较两个数组并根据它们的id属性来设置某个对象的disabled属性为true&#xff0c;你可以使用几种不同的方法。这里我将介绍几种常用的方法&#xff1a; 方法1&#xff1a;使用循环和条件判断 const array1 [{ id: 1, name: Item 1 },{ id…...

【Java基础】——集合篇

目标&#xff1a; 1.每个集合用的场景 2.每个集合的底层 一.概述 二. 三.Collection 1.通用方法 其中&#xff0c;contains方法&#xff0c;它的底层一定调用了equals方法进行比对&#xff0c;而且一定重写了equals方法&#xff0c;如果不重写equals方法&#xff0c;就是调用…...

小红书视频无水印下载方法

下载小红书&#xff08;RED/Xiaohongshu&#xff09;视频并去除水印可以通过以下几种方法实现&#xff0c;但请注意尊重原创作者版权&#xff0c;下载内容仅限个人使用&#xff0c;避免侵权行为。 方法一&#xff1a;使用在线解析工具&#xff08;推荐&#xff09; 复制视频链…...

代发考试战报:思科华为HCIP HCSE CCNP 考试通过

CCNP 300-410考试通过战报&#xff0c;HCIP云计算通过&#xff0c;HCIP数通 H12-821考试通过&#xff0c;H12-831考试通过&#xff0c;HCSP金融 H19-611考试通过&#xff0c;HCSE金融 H21-293 考试通过 报名考试一定要找正规报名&#xff0c;避免后续考试成绩被取消&#xff0…...

辉芒微离线烧录器“文件格式错误”问题解决

最近在使用辉芒微离线烧录器烧录程序时&#xff0c;提示“文件格式错误”&#xff0c;记录一下解决方法。 一、问题现象 经过多次尝试和排查&#xff0c;发现以下几种情况&#xff1a; 情况一&#xff1a;使用离线烧录器导入固件1&#xff08;boot程序&#xff09;&#xff0c…...

系统的从零开始学习电子的相关知识,该如何规划?

一、基础理论奠基&#xff08;6-12个月&#xff09; 1.1 数学与物理基础 核心内容&#xff1a; 微积分与线性代数&#xff08;高频电路建模必备&#xff09;复变函数与概率论&#xff08;信号处理与通信系统基础&#xff09;电磁场基础&#xff08;麦克斯韦方程组的物理意义&…...

网络研讨会开发注册中, 5月15日特励达力科,“了解以太网”

在线研讨会主题 Understanding Ethernet - from basics to testing & optimization 了解以太网 - 从基础知识到测试和优化 注册链接# https://register.gotowebinar.com/register/2823468241337063262 时间 北京时间 2025 年 5 月 15 日 星期四 下午 3:30 - 4:30 适宜…...

LSTM的简单模型

好的&#xff0c;我来用通俗易懂的语言解释一下这个 LSTMTagger 类是如何工作的。 1️⃣ 类的目的 这个 LSTMTagger 类是一个用于自然语言处理&#xff08;NLP&#xff09;任务的模型&#xff0c;目的是标注输入的句子&#xff0c;通常用于词性标注&#xff08;例如&#xff…...

聊聊Spring AI autoconfigure模块的拆分

序 本文主要研究一下Spring AI autoconfigure模块的拆分 v1.0.0-M6版本 (base) ➜ spring-ai-spring-boot-autoconfigure git:(v1.0.0-M6) tree -L 9 . ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── org │ │ │ └…...

LVGL源码学习之渲染、更新过程(3)---绘制和刷写

LVGL版本&#xff1a;8.1 往期回顾&#xff1a; LVGL源码学习之渲染、更新过程(1)---标记和激活 LVGL源码学习之渲染、更新过程(2)---无效区域的处理 前文提到&#xff0c;在处理完无效区域后&#xff0c;会得到一个个需要重新绘制的对象&#xff0c;这些对象将在DRAW事件中…...

CTF-DAY11

[NSSRound#16 Basic]了解过PHP特性吗 题目&#xff1a; <?php error_reporting(0); highlight_file(__FILE__); include("rce.php"); $checker_1 FALSE; $checker_2 FALSE; $checker_3 FALSE; $checker_4 FALSE; $num $_GET[num]; if (preg_match("/…...

手动修改uart16550的FIFO深度?

参考&#xff1a;修改AXI UART D16550 FIFO深度的过程记录 - lmore - 博客园...

Unity按钮事件冒泡

今天unity写程序时&#xff0c;我做了一个透明按钮&#xff0c;没图片&#xff0c;只绑了点击事件&#xff0c;把子对象文字组件也删了&#xff0c;空留一个透明按钮&#xff0c;此时运行时点击按钮是没有反应的&#xff0c;网上的教程说必须指定target graphic&#xff08;目标…...

基于Llama3的开发应用(一):Llama模型的简单部署

Llama模型的简单部署 0 前言1 环境准备1.1 硬件环境1.2 软件环境 2 Meta-Llama-3-8B-Instruct 模型简介2.1 Instruct含义2.2 模型下载 3 简单调用4 FastAPI 部署4.1 通过FastAPI简单部署4.2 测试 5 使用 streamlit 构建简易聊天界面6 总结 0 前言 本系列文章是基于Meta-Llama-…...

人工智能 机器学习期末考试题

自测试卷2 一、选择题 1&#xff0e;下面哪个属性不是NumPy中数组的属性&#xff08; &#xff09;。 A&#xff0e;ndim B&#xff0e;size C&#xff0e;shape D&#xff0e;add 2&#xff0e;一个简单的Series是由&#xff08; &#xff09;的数据组成的。 A&#xff0e;两…...

修改docker为国内源

一、编辑docker配置文件 vi /etc/docker/daemon.json二、配置国内源和修改docker数据目录 {"registry-mirrors":["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://u…...

C++八股 —— vector底层

vector底层为动态数组 类构成 class vector : protected _Vector_base_Vector_base: _M_start&#xff1a;容器元素开始的位置_M_finish&#xff1a;容器元素结束的位置_M_end_of_storage&#xff1a;动态内存最后一个元素的下一个位置 构造函数 无参构造 根据性能优先规则&a…...

postgresql 参数wal_level

wal_level决定多少信息写入到 WAL 中。默认值是replica&#xff0c;它会写入足够的数据以支持WAL归档和复制&#xff0c;包括在后备服务器上运行只读查询。minimal会去掉除从崩溃或者立即关机中进行恢复所需的信息之外的所有记录。最后&#xff0c;logical会增加支持逻辑解码所…...

Lightweight App Alternatives

The tech industry’s business model thrives on constant churn: new features, fancier designs, and heavier apps — not because they’re essential, but because they keep consumers upgrading. Stripping your phone back to basics is an act of tech self-defense.…...

SpringAI--基于MySQL的持久化对话记忆实现

SpringAI–基于MySQL的持久化对话记忆实现 项目源码 对话记忆官方介绍 SpringAI目前提供了一些将对话保存到不同数据源中的实现&#xff0c;比如: InMemoryChatMemory 基于内存存储CassandraChatMemory 在Cassandra中带有过期时间的持久化存储。Neo4jChatMemory 在Neo4j中没…...

【教学类-34-12】20250509(通义万相)4*3蝴蝶拼图(圆形、三角、正方、半圆的凹凸小块+数字提示+参考图灰色)

背景介绍 制作了四款异形角拼图,初步实现效果 【教学类-34-10】20250503(通义万相)4*3蝴蝶拼图(圆形、三角、正方、半圆的凹凸小块+参考图灰色)-CSDN博客文章浏览阅读1.4k次,点赞46次,收藏15次。【教学类-34-10】20250503(通义万相)4*3蝴蝶拼图(圆形、三角、正方、…...

C++编程语言:标准库:标准库概观(Bjarne Stroustrup)

第30章 标准库概观(Standard-Library Overview) 目录 30.1 引言 30.1.1 标准库设施 30.1.2 设计约束 30.1.3 描述风格 30.2 头文件 30.3 语言支持 30.3.1 对initializer_list的支持 30.3.2 对范围for的支持 30.4 异常处理 30.4.1 异常 30.4.1…...

Springboot+Vue+Mybatis-plus-Maven-Mysql项目部署

目录 VScode 1插件 2快捷键修改 3图标主题设置 4常用设置1 5设置自动换行 6颜色主题 7创建站点 8新建一个html文件 window系统设置 ps 1取色 2测量 3修改单位为像素 4放大图片 5拖动放大之后的图片 6文字大小测量 7测量文字的行高 8矩形选框切图1 9矩形选框…...

【C/C++】C++中noexcept的妙用与性能提升

文章目录 C中noexcept的妙用与性能提升1 什么情况下会抛出异常2 标记noexcept作用3 何时使用noexcept4 无异常行为标记场景5 一句话总结 C中noexcept的妙用与性能提升 在C中&#xff0c;noexcept修饰符用于指示函数不会抛出异常 1 什么情况下会抛出异常 在 C 中&#xff0c;异…...

增强学习(Reinforcement Learning)简介

增强学习&#xff08;Reinforcement Learning&#xff09;简介 增强学习是机器学习的一种范式&#xff0c;其核心目标是让智能体&#xff08;Agent&#xff09;通过与环境的交互&#xff0c;基于试错机制和延迟奖励反馈&#xff0c;学习如何选择最优动作以最大化长期累积回报。…...

如何优化系统启动时间--基于米尔瑞萨MYD-YG2LX开发板

1.概述 MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器&#xff0c;该处理器搭载双核Cortex-A551.2GHzCortex-M33200MHz处理器&#xff0c;其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元&#xff08;支持H.264硬件编解码&#xff09;,16位的DDR4-1600 / DDR3L-1333内…...

.Net HttpClient 概述

HttpClient 概述 作用 HttpClient是一个用于发送HTTP请求和接收HTTP响应的类。它提供了一种现代化、灵活和强大的方式来与Web服务进行通信。HttpClient类位于System.Net.Http命名空间下&#xff0c;可以通过NuGet包管理器进行安装。 整体理解 HttpClient是应用程序进程中&am…...

明远智睿SSD2351开发板:仪器仪表与智慧农业的创新利器

在仪器仪表和智慧农业领域&#xff0c;对设备的精度、稳定性和智能化程度有着较高的要求。明远智睿的SSD2351开发板以其独特的优势&#xff0c;成为这两个领域的创新利器。 在仪器仪表方面&#xff0c;SSD2351开发板的四核1.4GHz处理器能够快速处理仪器仪表采集到的各种数据&am…...

VBA -- 学习Day4

数组 创建数组&#xff1a; Dim 数组名&#xff08;数组元素上下角标&#xff09;[As 元素类型] eg. Dim MyArray (1 To 3) As Integer 注意&#xff1a;1.如果不指定元素类型&#xff0c;则是Variant类型 向数组赋值&#xff1a; eg. MyArray(1) 100 MyArray(2) 200…...