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

详细介绍:boost::circular_buffer的使用方法简介

boost::circular_buffer:

boost::circular_buffer 是 Boost 库中的一个循环缓冲区容器,特别适用于需要固定容量存储的场景。当缓冲区容量满时,新插入的元素会覆盖最旧或最新的元素(取决于插入方式)。以下是详细的使用方法和示例代码:

1. 基本使用方法

包含头文件
#include
‌‌创建循环缓冲区
boost::circular_buffer cb(3); // 创建容量为3的循环缓冲区
boost::circular_buffer cb2(cb); // 拷贝构造
boost::circular_buffer cb3(std::move(cb)); // 移动构造
‌‌初始化方法
  • 直接指定容量

    在构造 boost::circular_buffer 时,直接传入容量参数:

    #include
    #include
    int main() {
    // 初始化容量为5的循环缓冲区
    boost::circular_buffer cb(5);
    // 验证容量
    std::cout << "Capacity: " << cb.capacity() << std::endl; // 输出: Capacity: 5
    std::cout << "Size: " << cb.size() << std::endl;         // 输出: Size: 0 (初始为空)
    return 0;
    }
  • 初始化时填充默认值

    如果需要初始化时填充默认值,可以结合 std::generate 或循环:

    #include
    #include  // for std::generate
    #include
    int main() {
    const int capacity = 5;
    boost::circular_buffer cb(capacity);
    // 填充默认值0(实际无需显式填充,因为默认构造已初始化)
    std::generate(cb.begin(), cb.end(), []() { return 0; });
    // 或者直接通过循环插入
    for (int i = 0; i < capacity; ++i) {
    cb.push_back(0); // 显式插入0
    }
    // 验证
    for (const auto& elem : cb) {
    std::cout << elem << " "; // 输出: 0 0 0 0 0
    }
    return 0;
    }
  • 空间优化版本(circular_buffer_space_optimized

    如果需要动态调整容量以避免内存浪费,可以使用 boost::circular_buffer_space_optimized

    #include
    #include
    int main() {
    // 初始最小容量为2,最大容量为10
    boost::circular_buffer_space_optimized cb(2, 10);
    // 插入元素,容量会自动扩展
    for (int i = 0; i < 15; ++i) {
    cb.push_back(i);
    std::cout << "Current capacity: " << cb.capacity() << std::endl;
    }
    // 输出会显示容量从2逐步扩展到10
    return 0;
    }
  •  动态调整容量

    如果需要后续调整容量,可以使用 set_capacity 或 resize

    #include
    #include
    int main() {
    boost::circular_buffer cb(3); // 初始容量3
    cb.push_back(1);
    cb.push_back(2);
    // 动态调整容量为5
    cb.set_capacity(5);
    std::cout << "New capacity: " << cb.capacity() << std::endl; // 输出: 5
    // 继续插入元素(不会覆盖,因为容量扩大)
    cb.push_back(3);
    cb.push_back(4);
    cb.push_back(5);
    // 验证
    for (const auto& elem : cb) {
    std::cout << elem << " "; // 输出: 1 2 3 4 5
    }
    return 0;
    }
插入元素
  • push_back‌:在尾部插入元素,若缓冲区满,则覆盖最旧的元素(头部)。
  • push_front‌:在头部插入元素,若缓冲区满,则覆盖最新的元素(尾部)。
    cb.push_back(1); // 插入1
    cb.push_back(2); // 插入2
    cb.push_back(3); // 插入3,此时缓冲区满
    cb.push_back(4); // 覆盖1,缓冲区变为[2, 3, 4]
    cb.push_front(5); // 覆盖4,缓冲区变为[5,2,3]
  • insert‌:在指定位置插入元素。
    auto it = cb.begin() + 1;
    cb.insert(it, 6); // 在第二个位置插入6,缓冲区变为[5,6,2]

访问和遍历元素
  • 通过下标访问‌:
    assert(cb[0] == 2); // 访问第一个元素
    assert(cb.back() == 4); // 访问最后一个元素
  • 通过迭代器遍历‌:
    for (auto it = cb.begin(); it != cb.end(); ++it) {
    std::cout << *it << " "; // 输出:2 3 4
    }
  • 范围循环(推荐)‌:
    for (const auto& elem : cb) {
    std::cout << elem << " "; // 输出:2 3 4
    }
移除元素
  • pop_front‌:移除最旧的元素(头部)。
  • pop_back‌:移除最新的元素(尾部)。
    cb.pop_front(); // 移除2,缓冲区变为[3, 4]
    cb.pop_back();  // 移除4,缓冲区变为[3]
  • erase‌:移除指定位置的元素。
    auto it = cb.begin();
    cb.erase(it); // 移除第一个元素,缓冲区变为空
  • clear:容量不变,仅清空元素。
    cb.clear()

2. 高级特性函数

容量与状态检查
  • size‌:返回当前元素数量。
    assert(cb.size() == 3); // 当前元素数量
  • capacity‌:返回缓冲区总容量。
    assert(cb.capacity() == 3); // 总容量
  • empty‌:检查缓冲区是否为空。
    if (cb.empty()) { /* 处理空缓冲区 */ }
  • full‌:检查缓冲区是否已满。
    if (cb.full()) { /* 处理满缓冲区 */ }
  • 旋转缓冲区(rotate‌将缓冲区元素旋转指定位置。
    cb.rotate(cb.begin() + 1); // 将第二个元素旋转到头部
    // 缓冲区从[5,6,2]变为[6,2,5]

‌3. 完整示例代码

#include
#include
#include
int main() {
// 创建容量为3的循环缓冲区
boost::circular_buffer cb(3);
// 插入元素
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
// 断言检查
assert(cb[0] == 1);
assert(cb[1] == 2);
assert(cb[2] == 3);
assert(cb.size() == 3);
assert(cb.capacity() == 3);
// 插入新元素(覆盖旧元素)
cb.push_back(4); // 覆盖1,缓冲区变为[2, 3, 4]
assert(cb[0] == 2);
assert(cb[1] == 3);
assert(cb[2] == 4);
// 遍历缓冲区
std::cout << "Buffer contents: ";
for (const auto& elem : cb) {
std::cout << elem << " "; // 输出:2 3 4
}
std::cout << std::endl;
// 移除元素
cb.pop_front(); // 移除2,缓冲区变为[3, 4]
cb.pop_back();  // 移除4,缓冲区变为[3]
// 最终状态
assert(cb.size() == 1);
assert(cb[0] == 3);
return 0;
}
#include
#include
#include
int main() {
// 创建容量为3的循环缓冲区
boost::circular_buffer cb(3);
// 插入元素
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
assert(cb.full()); // 缓冲区已满
// 覆盖插入
cb.push_back(4); // 覆盖1,缓冲区变为[2,3,4]
cb.push_front(5); // 覆盖4,缓冲区变为[5,2,3]
// 遍历缓冲区
std::cout << "Buffer contents: ";
for (const auto& elem : cb) {
std::cout << elem << " "; // 输出:5 2 3
}
std::cout << std::endl;
// 线性化访问
int* p = cb.linearize();
assert(p[0] == 5 && p[1] == 2 && p[2] == 3);
// 旋转缓冲区
cb.rotate(cb.begin() + 1); // 缓冲区变为[2,3,5]
for (const auto& elem : cb) {
std::cout << elem << " "; // 输出:2 3 5
}
return 0;
}

‌4. 关键特性

  1. 固定容量‌:与 std::vector 或 std::list 不同,boost::circular_buffer 的容量在创建时固定,不会动态增长。
  2. 覆盖策略‌:当缓冲区满时,push_back 覆盖头部元素,push_front 覆盖尾部元素。
  3. 高效操作‌:插入和删除操作的时间复杂度为 O(1)。
  4. 线程安全‌:若需在多线程环境中使用,需配合互斥锁(如 std::mutex)。
  5. 构造函数初始化‌:boost::circular_buffer<int> cb(N) 直接指定容量 N
  6. 动态调整‌:使用 set_capacity(N) 或 resize(N, default_value)
  7. 空间优化‌:circular_buffer_space_optimized 适合需要动态容量的场景。
  8. 默认值‌:Boost 不会自动填充默认值,需手动初始化(如通过 std::generate)。

相关文章:

详细介绍:boost::circular_buffer的使用方法简介

详细介绍:boost::circular_buffer的使用方法简介pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace…...

基于禁忌搜索算法的TSP问题最优路径搜索matlab仿真

1.程序功能描述 基于禁忌搜索算法的TSP问题最优路径搜索,旅行商问题(TSP)是一个经典的组合优化问题。其起源可以追溯到 19 世纪初,最初是在物流配送、线路规划等实际场景中被提出。简单来说,给定一组城市和城市之间的距离,旅行商需要从一个城市出发,访问每个城市恰好…...

PDD9.14 笔试 - 浪矢

目录Day1 T1Day1 T4 Day1 T1 简单的模拟: 题目内容大概是给一个字符串a,a的子串拼成字符串b。 例如abcd -> abbccd 给你b字符串,要求给出a字符串。 思路:b字符串中除了第一个字符和最后一个字符串外,其他的都是重复字符,隔一个选一个就好。点击查看代码 import java.u…...

增肌,减脂,变瘦的联系和区别

首先,健身的目的基本都是为了好看的体型,肌肉和脂肪匀称的占比,力量和丝滑的结合。如果是运动员或需要针对性训练肌肉的话,那另说。 其次,这里说一下饮食和训练的关系。 俗话说,三分练七分吃。很多人不理解,为什么吃这么重要,但是我各种营养餐,减脂餐,轻食,没少吃,…...

(eval):1: _python-argcomplete: function definition file not found

(eval):1: _python-argcomplete: function definition file not found 我在使用kali的时候每次想使用table键补全命令就会报错,很烦人就是 去网上搜了一下,终于找到了解决方法argcomplete是一个用于Python的命令行参数自动补全工具。它通过与argparse库结合,为Python应用程序…...

详细介绍:【Spring Boot 报错已解决】Web server failed to start. Port 8080 was already in use.

详细介绍:【Spring Boot 报错已解决】Web server failed to start. Port 8080 was already in use.pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…...

Nordic Neuton.AI 技术优势;

Nordic Neuton.AI 技术的主要优势包括: 极小模型体积 Neuton.AI 能自动生成极小的机器学习模型,通常仅需几 KB(平均小于 5 KB),比传统框架(如 TensorFlow Lite for Microcontrollers)小 10 倍以上。 自动化建模,无需 ML 专业知识 Neuton.AI 平台无需开发者具备神经网络…...

channel Sounding 工作流程

1、必须要建立连接,并且配对绑定模式; 2、通过发送LL_CS_CONFIG_REQ PDU Select “启动器(Initiator) 或 反射器Reflector; 3、LL_CS_CONFIG_RSP PDU Select “与 DEVICE A 相反的角色 ” 4、启动器( Initiator )和反射器都可以发起channel sounding的流程; 如果对这个…...

基于Zhang-Suen算法的图像细化处理FPGA实现,包含testbench和matlab验证程序

1.算法运行效果图预览 (完整程序运行后无水印)将数据导入到matlab中显示图片:可以看到,图3,通过FPGA细化之后,可以获得和MATLAB一样的效果(图2),两者相对于原图(图1)都实现了图像的细化处理。2.算法运行软件版本 vivado2019.2matlab2024b/matlab2022a3.部分核心程序 (…...

channel Sounding RTT和PBR 属性总结

1、蓝牙联盟规定了有72个信道可以使用,每个信道带宽1M; 2、跳频模式和普通ble 跳频方式是不一样的; 3、channel Sounding 必须要是建立连接的; 4、角色分为启动器和反射器; 6、启动器:计算自身到另一个设备的距离 7、反射器:对启动器进行响应的设备; 8、跳频机制和我们普…...

二分查找方法

/*二分查找方法,前提是这个数组是有序的,无序的先排序 1-100; 50 25 判断结构,循环结构(比较),区间为零时找完,则没有找到 / //public static boolean binarySearch(int[]array,int target) //{//定义左右坐标 // int left=0; // int right=array.length-1; /因为…...

复制一个数组的方法

public class DemoArray { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; int[] array1 = new int[array.length]; // for(int i:array){//特殊方法(遍历数据的时候),只需要输出数据的时候使用 // System.out.println(i); //…...

判断目标是否在数组里面

public static boolean fiandTarget(int[] array,int target){ // boolean flag = false; for (int i = 0; i < array.length; i++) { if (array[i] == target){ return true; //flag = true; } } // return flag; return false; }...

选择排序方法

public static void chooseSort(int[] array){for (int i = 0; i < array.length - 1; i++){//记住索引位置int min = array[i];int minIndex = i;//开始内存比较for (int j = i+1; j < array.length; j++) {// 如果发现比标志的小的,就将赋值给标志位if (array[j] <…...

ArcGIS Pro 遇到严重的应用程序错误而无法启动 - 教程

ArcGIS Pro 遇到严重的应用程序错误而无法启动 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...

第一次作业

大家好我日常有三个常做的事:刷视频、玩游戏、偶尔画画。刷视频时,我不只是看娱乐内容,遇到 “Python 基础操作”“PS 简单修图” 这类实用知识,会随手存到收藏夹,每周还会抽 1 小时把零散知识点整理成笔记,现在已经攒了厚厚一本,之前帮同学修图时,还从笔记里找到过调整…...

markdown文件上传到博客园教程

如何将Markdown文件上传到博客园文本内容 图片资源前期准备 vscode软件下载并安装vscode软件安装博客园插件并登录账号在vscode中,通过搜索栏搜索并安装博客园插件,插件名称为:博客园cnblogs客户端,安装后重启vscode软件。登录账号登录成功后可以上传到博客园markdown文件上…...

自我介绍

大家好,我是 谢燚欣 一名来自数据科学与大数据技术专业的学生,很高兴加入博客园以及接下来对我的学习过程进行记录。在学习之外,我还有一颗好奇和勇于尝试的心。当我对滑滑板和滑雪很好奇时,我就会去尝试它们,尽管每一次的摔跤都伴随着剧烈的疼痛,那是也阻挡不了我对它的…...

【展厅多媒体】从技术到体验,AR在展厅中的一体化整合 - 指南

【展厅多媒体】从技术到体验,AR在展厅中的一体化整合 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New"…...

LilCTF 2025

Qt_Creator Solve 通过字符串找到槽函数sub_410100()发现判断点为this == v21,直接动调(附加)到这个地方取值就行(跳过下面部分)根据字符串找到注册信号的位置向上翻找到该类的this指针What I have learned此题不止在demo_code_editor.exe执行过程中存在反调试,在加载库时应该也…...

AES算法原理与举例说明

AES算法原理与举例说明AES( Advanced Encryption Standard,高级加密标准 )是当前全球主流的对称分组密码,用于替代安全性不足的 DES,广泛应用于 HTTPS、文件加密、物联网通信等场景。其核心特点是分组长度固定为 128 位,密钥长度支持 128 位、192 位、256 位(对应算法称…...

ffplay音频重采样 - 教程

ffplay音频重采样 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size:…...

devexpress gridcontrol表格知识

过滤 高亮显示 ,不过滤非匹配行行选择,单行编辑 活动行着色 保存...

深入解析:Qt串口通信学习

深入解析:Qt串口通信学习pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size…...

字符串算法笔记

记号约定:\(|s|\):字符串 \(s\) 的长度。 \(\mathbb{S}\):字符串集。 \(\Sigma\):字符集。一些约定:下标从 \(0\) 开始。1. 哈希 1.1 定义 我们想要快速求出字符串 \(s\) 是否等于 \(t\)。 如果 \(|s| \neq |t|\),那么一定不相等,所以令 \(|s| = |t| = n\)。那么有 \(O(…...

【光照】Unity[经验模型]和[物理模型]

Unity URP(Universal Render Pipeline)中的光照模型BRDF(双向反射分布函数)是PBR(基于物理的渲染)的核心组成部分,用于模拟真实世界的光照交互。【从UnityURP开始探索游戏渲染】专栏-直达一、BRDF发展历史(时间线)‌1971年‌:Bouknight提出首个光反射模型,引入Lambe…...

实用指南:浅聊一下Redisson分布式锁

实用指南:浅聊一下Redisson分布式锁pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...

JavaScript起源

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门:HTML 定义了网页的内容 CSS 描述了网页的布局 JavaScript 控制了网页的行为本教程是关于 JavaScript 及介绍 JavaScript 如何与 HTML 和 CSS 一起工作。谁适合阅读本教程? 1. 如果您想学习 J…...

9.14做题随记

OI学习,宁可不学不可逆向,要么知道题目怎么做后学习代码写法,要么知道代码基础学习题目怎么做,要么两种都会学习另外一种解法,万万不可逆向学习,费心费力。P1678 烦恼的高考志愿 题目背景 计算机竞赛小组的神牛 V 神终于结束了高考,然而作为班长的他还不能闲下来,班主任…...

树-学习笔记

定义:一个树是由n个元素组成的有限集合。其中,每个元素叫结点(node) 性质:有一个特殊的结点叫根节点(root node) 从图论的角度,一个树有n-1条边,所以它是无环的。同时,它是连通的,因为可以直接或间接地从一个结点走到另一个结点 除了根结点以外,其余的结点可以分成m(m&…...

centos 安装 postgresql 数据库

* 安装必要的工具yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm* 移除可能冲突的默认 PostgreSQL 模块(如有)yum remove -y postgresql** 查看 postgresql 版本yum list postgresql** 按 y 一直安…...

个人问题反省--致命问题(急需解决)

目前尝试投了几家距离较远的公司,但是沟通均未深入,所以停止盲目投递,跳脱出来反思个人问题。...

STM32 HAL学习笔记:EC11的使用和定时器中编码器模式的中断

本文使用STM32Cube软件包提供的驱动对EC11进行读取,包含部分电路原理图和代码。背景 之前买了一个EC11,想要拿来实现音量调节之类的功能,现在终于有时间研究了。 原理图 一开始R1、R2、R3选择的是100k,测试发现下降沿只有几百纳秒,但上升沿过于平缓,如下图,旋转较快时容…...

题解:P12546 [UOI 2025] Convex Array

目前暂无修正。 % 你赛出了这题,赛后补题参照FFTotoro的题解详细化了一下具体转移过程及思路,在此感谢原作者(怎么套娃了)。 不难得出题意等价于找出两个不同的序列使得相邻两数差单调不降,两个序列的并集为原序列集合(可重集),两个序列的交集为升序排序后的 \(\{a_1\}…...

Java并发编程(1)

基础 1、并行跟并发的区别 并行:同一时刻,多个线程都在执行,这就要求有多个CPU分别执行多个线程。 并发:在同一时刻,只有一个线程执行,但在一个时间段内,两个线程都执行了。其实现依赖于CPU切换线程,因为切换时间很短,所以基本对于用户是无感知的。2、什么是进程和线程…...

玩转 hostnamectl set-hostname:Linux 主机名管理的优雅方式 - 实践

玩转 hostnamectl set-hostname:Linux 主机名管理的优雅方式 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier Ne…...

DES原理与举例说明

DES原理与举例说明一、DES 核心原理:6 大关键步骤 DES 的加密过程可拆解为 “初始置换→密钥扩展→16 轮迭代→逆初始置换” 四大阶段,其中 16 轮迭代是加密的核心,每轮又包含 “扩展置换、异或、S 盒替换、P 盒置换”4 个步骤。整体流程如下: 1. 预处理:明文初始置换(IP…...

Spring八股文 - 实践

Spring八股文 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14p…...

Morpheus 审计报告分享2:ChianLink 数据源有着不同的“心跳”

漏洞信息 漏洞报告https://code4rena.com/audits/2025-08-morpheus/submissions/S-709漏洞代码https://github.com/code-423n4/2025-08-morpheus/blob/a65c254e4c3133c32c05b80bf2bd6ff9eced68e2/contracts/capital-protocol/ChainLinkDataConsumer.sol#L78-L107漏洞背景 Heart…...

「嘶吼」第一章:吃饭睡觉打豆豆

标准的鹅蛋脸圆圆的,瞪着一双大眼,大双眼皮显得格外精神,小肚子微微隆起,头发及腰,常常梳着高马尾。因为从小营养过剩,她个子在幼儿园里偏高,跑得快,力气大,小胳膊小腿扑腾起来可折腾人了,用不完的精力都用在调皮捣蛋上了。小胖妞?这无疑是对李鹤然最好的形容。一岁…...

Clion 基础设置

切换中英文切换老 UI 在 CLion 2024.2 及更高版本中,旧版 UI 已不再作为内置选项,而是通过插件提供。...

《Vuejs设计与实现》第 16 章(解析器) 上 - 教程

《Vuejs设计与实现》第 16 章(解析器) 上 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospac…...

go代码(1)

package main import "fmt" func main() { fmt.Println("hello world") } 运行: $ go run hello-world.go hello world $ go build hello-world.go $ ls hello-world hello-world.go $ ./hello-world hello world本文来自博客园,作者:gosamuel,转载…...

7种常见的入侵检测系统规避技术解析

本文详细解析了攻击者常用的7种入侵检测系统(IDS)规避技术,包括文件恶意软件、混淆技术、IP分片、源路由等,并提供了相应的缓解措施,帮助企业安全团队加强网络防护。7种常见的入侵检测系统规避技术 恶意攻击者使用各种规避策略渗透网络,而入侵检测系统(IDS)却未能察觉。了解…...

js的引用

js代码 JavaScript又称ECMAScript,常用的版本通常有es5以及es6 元素中的代码 a元素除了能定义链接地址,同样可以定义js <a href="javascript:window.alert(hello)">Hello</a>我们可以通过按钮的单击事件实现上面相同的效果,其中事件也就是什么情况下执…...

P3957 [NOIP 2017 普及组] 跳房子

题目描述 给出 \(n\) 个点的坐标 \(a_i\) 和权值 \(s_i\),每次向右移动正距离 \(p\),满足 \(d-x \le p \le d+x\) 且落在给定的点上,求使经过点值的最大和不小于 \(k\) 的最小 \(x\)。 思路 step1-二分答案 这道题我们要求的是最小的 \(x\),可显然我们无法将 \(x\) 设计到状…...

C++中常用的STL容器

C++中常用的STL容器: Vector:变长数组:数组长度是可以动态变化的,倍增 Pair<X,Y>:二元组:前后两个元素类型可以不同 string:字符串:常见的函数:substr()截取一段字串,c_str()返回字符串的头指针 queue:队列:先进先出,push()插入,pop() 弹出,front() 返回…...

我的数据科学探索之旅:从兴趣到公考与学习计划

一.关于我:不止于代码的多面手我的兴趣:在热爱里收获成长​ 生活中的我,总喜欢在艺术相关的领域折腾。从初中开始,我就爱上了跳舞,第一次跟着视频练基础动作时,肢体僵硬得像 “机器人”,连简单的 wave 都做不流畅,反复练习后还总跟不上节奏。但我没放弃,每周坚持练 3 …...

MySQL 核心记录解析:从配置到存储的 “说明书 + 记录仪” 系统

MySQL 核心记录解析:从配置到存储的 “说明书 + 记录仪” 系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New&quo…...

JavaScript Array 对象

JavaScript 中的 Array 对象是用于存储多个值的特殊类型的对象。 Array 是按顺序存储元素的,可以根据索引(从 0 开始)来访问它们。 创建数组 可以通过几种方式创建数组: 使用 Array 构造函数: let arr1 = new Array(3); // 创建一个长度为 3 的空数组 let arr2 = new Arr…...