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

【C/C++】高阶用法_笔记

1. 模板元编程(TMP)与编译时计算

(1) 类型萃取与 SFINAE
  • 类型萃取(Type Traits):利用模板特化在编译时推断类型属性。

    template<typename T>
    struct is_pointer { static constexpr bool value = false; };template<typename T>
    struct is_pointer<T*> { static constexpr bool value = true; };static_assert(is_pointer<int*>::value, "T must be a pointer");
    
  • SFINAE(Substitution Failure Is Not An Error):通过模板参数匹配失败实现条件编译。

    template<typename T>
    auto foo(T t) -> decltype(t.serialize(), void()) { /* T 有 serialize() 方法时调用 */ }template<typename T>
    void foo(...) { /* 默认实现 */ }
    
(2) 编译时计算(constexpr 与模板)
  • constexpr 函数:在编译期执行计算。

    constexpr int factorial(int n) {return (n <= 1) ? 1 : n * factorial(n - 1);
    }
    static_assert(factorial(5) == 120);
    
  • 模板递归计算

    template<int N>
    struct Factorial { static constexpr int value = N * Factorial<N-1>::value; };template<>
    struct Factorial<0> { static constexpr int value = 1; };
    

2. 移动语义与完美转发

(1) 右值引用与移动语义
  • 避免深拷贝:通过移动构造函数和 std::move 转移资源所有权。
    class BigData {BigData(BigData&& other) noexcept : ptr_(other.ptr_) { other.ptr_ = nullptr; }int* ptr_;
    };BigData a;
    BigData b = std::move(a);  // 触发移动构造
    
(2) 完美转发(Perfect Forwarding)
  • 保留参数类型:使用 std::forward 转发参数到其他函数。
    template<typename... Args>
    void wrapper(Args&&... args) {target(std::forward<Args>(args)...);  // 保持参数的值类别(左值/右值)
    }
    

3. 智能指针与资源管理

(1) 所有权管理
  • std::unique_ptr:独占所有权,不可复制,可移动。

    auto ptr = std::make_unique<int>(42);  // 推荐替代 new
    
  • std::shared_ptr:共享所有权,基于引用计数。

    auto ptr = std::make_shared<int>(42);  // 引用计数 +1
    auto ptr2 = ptr;                       // 引用计数 +2
    
  • std::weak_ptr:打破循环引用,避免内存泄漏。

    std::weak_ptr<A> weak = shared_ptr_A;
    if (auto spt = weak.lock()) { /* 安全访问 */ }
    

4. 并发编程与原子操作

(1) 线程与同步
  • std::thread:跨平台线程管理。

    void task() { std::cout << "Thread running\n"; }
    std::thread t(task);
    t.join();
    
  • 互斥锁与条件变量

    std::mutex mtx;
    std::unique_lock<std::mutex> lock(mtx);  // RAII 风格锁
    std::condition_variable cv;
    cv.wait(lock, []{ return data_ready; }); // 条件等待
    
(2) 原子操作(Atomic)
  • 无锁编程:保证操作的原子性。
    std::atomic<int> counter{0};
    counter.fetch_add(1, std::memory_order_relaxed);
    

5. RAII(资源获取即初始化)

  • 资源自动释放:利用对象生命周期管理资源(如文件句柄、网络连接)。
    class FileHandle {
    public:FileHandle(const char* filename) : file_(fopen(filename, "r")) {}~FileHandle() { if (file_) fclose(file_); }
    private:FILE* file_;
    };
    

6. 类型推导与现代语法

(1) autodecltype
  • 自动类型推导

    auto x = 42;          // x 为 int
    auto& ref = x;        // ref 为 int&
    const auto* ptr = &x; // ptr 为 const int*
    
  • decltype 推导表达式类型

    int a = 10;
    decltype(a) b = a;  // b 的类型为 int
    
(2) Lambda 表达式
  • 匿名函数对象
    auto lambda = [](int x) -> int { return x * 2; };
    std::vector<int> v = {1, 2, 3};
    std::transform(v.begin(), v.end(), v.begin(), [](int x) { return x + 1; });
    

7. 元编程库与工具

(1) Boost 库
  • Boost.Hana:现代 C++ 元编程库。
    using namespace boost::hana;
    auto types = tuple_t<int, double, char>;  // 类型容器
    
(2) std::variantstd::visit
  • 类型安全的联合体
    std::variant<int, double, std::string> v;
    v = 3.14;  // 存储 double
    std::visit([](auto&& arg) { std::cout << arg; }, v);  // 访问值
    

8. 高级调试与优化

(1) 自定义内存管理
  • 重载 new/delete
    void* operator new(size_t size) {void* p = custom_alloc(size);if (!p) throw std::bad_alloc();return p;
    }
    
(2) 内联汇编与编译器指令
  • 嵌入汇编代码(需谨慎):
    int add(int a, int b) {asm("addl %%ebx, %%eax;" : "=a"(a) : "a"(a), "b"(b));return a;
    }
    

应用场景示例

  1. 高性能计算:利用模板元编程生成优化代码,减少运行时开销。
  2. 游戏引擎:通过移动语义高效管理资源(纹理、模型)。
  3. 分布式系统:使用原子操作实现无锁数据结构(队列、哈希表)。
  4. 嵌入式开发:通过 RAII 管理硬件资源(GPIO、定时器)。

注意事项

  • 可读性平衡:避免过度使用模板元编程导致代码晦涩。
  • 异常安全:确保资源在异常发生时正确释放。
  • 跨平台兼容性:注意不同编译器对特性的支持差异(如 MSVC 和 GCC)。

相关文章:

【C/C++】高阶用法_笔记

1. 模板元编程&#xff08;TMP&#xff09;与编译时计算 (1) 类型萃取与 SFINAE 类型萃取&#xff08;Type Traits&#xff09;&#xff1a;利用模板特化在编译时推断类型属性。 template<typename T> struct is_pointer { static constexpr bool value false; };templ…...

AMS3xxi激光测距仪安装调试维护详解

一、应用原理介绍 如下图&#xff0c;AMS3xxi激光测距发出的激光通过特定反光板返回后&#xff0c;利用“时间飞行法”原理进行距离 测量。测量中若遮挡光束传播会导致测距失败&#xff0c;产品报警。 二、固定和调节位置说明 在安装板上&#xff0c;使用 4 个 M5 螺钉锁 AMS…...

建筑IT数字化突围:建筑设计企业的生存法则重塑

困局&#xff1a;铅笔与键盘的撕裂之痛 晨光中的设计院里&#xff0c;总工老张的办公桌上堆叠着三摞图纸&#xff1a;左边是刚收尾的住宅施工图&#xff0c;中间夹着结构专业提资的变更单&#xff0c;右边是甲方连夜发来的方案调整意见。这是他从业28年来的日常&#xff0c;也…...

VTK|类似CloudCompare的比例尺实现2-vtk实现

文章目录 实现类头文件实现类源文件调用逻辑关键问题缩放限制问题投影模式项目git链接实现类头文件 以下是对你提供的 ScaleBarController.h 头文件添加详细注释后的版本,帮助你更清晰地理解每个成员和方法的用途,尤其是在 VTK 中的作用: #ifndef SCALEBARCONTROLLER_H #de…...

Java高频面试之并发编程-17

volatile 和 synchronized 的区别 在 Java 并发编程中&#xff0c;volatile 和 synchronized 是两种常用的同步机制&#xff0c;但它们的适用场景和底层原理有显著差异。以下是两者的详细对比&#xff1a; 1. 核心功能对比 特性volatilesynchronized原子性不保证复合操作的原…...

最优化方法Python计算:有约束优化应用——近似线性可分问题支持向量机

二分问题的数据集 { ( x i , y i ) } \{(\boldsymbol{x}_i,y_i)\} {(xi​,yi​)}&#xff0c; i 1 , 2 , ⋯ , m i1,2,\cdots,m i1,2,⋯,m中&#xff0c;特征数据 { x i } \{\boldsymbol{x}_i\} {xi​}未必能被一块超平面按其标签值 y i ∈ { − 1 , 1 } y_i\in\{-1,1\} yi​∈…...

Excel中批量对多个结构相同的工作表执行操作,可以使用VBA宏来实现

【系列专栏】&#xff1a;博主结合工作实践输出的&#xff0c;解决实际问题的专栏&#xff0c;朋友们看过来&#xff01; 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实…...

Spring的Validation,这是一套基于注解的权限校验框架

为了保证数据的正确性、完整性&#xff0c;作为一名后端开发工程师&#xff0c;不能仅仅依靠前端来校验数据&#xff0c;还需要对接口请求的参数进行后端的校验。 controller 全局异常处理器 在项目中添加一个全局异常处理器&#xff0c;处理校验异常 RestControllerAdvice p…...

鸿蒙OSUniApp 开发的下拉刷新与上拉加载列表#三方框架 #Uniapp

使用 UniApp 开发的下拉刷新与上拉加载列表 前言 最近在做一个小程序项目时&#xff0c;发现列表的加载体验对用户至关重要。简单的一次性加载全部数据不仅会导致首屏加载缓慢&#xff0c;还可能造成内存占用过大。而分页加载虽然解决了这个问题&#xff0c;但如果没有良好的…...

VastBase的日常操作记录

---------需要命令启动数据库操作------------------- [vastbasedmz-neo4j01 ~]$ vb_ctl start [2025-05-13 09:41:54.515][10224][][vb_ctl]: vb_ctl started,数据目录是 /home/vastbase/data/vastbase [2025-05-13 09:41:54.728][10224][][vb_ctl]: 等待服务端进程启动 ... …...

企业级IP代理解决方案:负载均衡与API接口集成实践

在全球化业务扩张与数据驱动决策的背景下&#xff0c;企业级IP代理解决方案通过负载均衡技术与API接口集成&#xff0c;可有效应对高频请求、反爬机制及合规风险。以下是基于企业级场景的核心实践要点&#xff1a; 一、负载均衡与IP代理的深度协同 动态IP池的负载均衡策略 轮询…...

智能手表项目风险评估与应对计划书

&#x1f4d8; 智能手表项目风险评估与应对计划书 项目名称&#xff1a;Aurora Watch S1 版本号&#xff1a;v1.0 编制人&#xff1a;XXX&#xff08;项目经理&#xff09; 日期&#xff1a;2025年xx月xx日 一、概述 本计划书旨在识别Aurora Watch S1智能手表项目全过程中可能…...

Java基础之静态代理和动态代理

一、静态代理 定义&#xff1a; 代理类与被代理类在编译期就已确定&#xff0c;代理类需要手动编写并实现与被代理类相同的接口 1.核心角色&#xff1a; Subject&#xff08;抽象主题&#xff09;&#xff1a;定义业务方法的接口 RealSubject&#xff08;真实主题&#xff…...

观成科技:加密C2框架Vshell流量分析

一、工具介绍 Vshell是一款功能全面的红队工具&#xff0c;其设计兼顾隐蔽性与灵活性&#xff0c;尤其适合模拟网络攻击和测试防御体系。该工具支持TCP、UDP、KCP、WebSocket、DNS、DOH、DOT等多种协议。内置隧道代理功能&#xff0c;支持正向和反向连接模式&#xff0c;可以适…...

麒麟环境下Selenium的使用

本文主要介绍了在内网环境下、服务主机无域名的情况下,为了抓取内网其他系统网页数据,安装使用Selenium的方,并详细介绍了离线安装python依赖包的方法。服务主机操作系统为麒麟V10 SP3。 一. 查看可以安装的浏览器安装包 1. 更新软件包索引 首先确保软件包列表是最新的:…...

Protocol Buffers 全流程通俗讲解

Protocol Buffers 全流程通俗讲解&#xff08;从 0 到进阶&#xff09; 目录 序列化到底为什么要选 Protobuf&#xff1f;核心原理&#xff1a;一眼看懂二进制编码10 分钟跑通「写 .proto → 生成代码 → 读写数据」.proto 文件 8 条黄金法则&#xff08;小白友好版&…...

从故障到防护:抗晃电保护装置如何提升电网可靠性?

安科瑞刘鸿鹏 摘要 随着工业自动化水平的提升&#xff0c;生产设备对供电连续性和稳定性的依赖程度越来越高&#xff0c;电网中的电压暂降&#xff08;俗称“晃电”&#xff09;问题对工业生产构成了严重威胁。特别是在化工、冶金、半导体等高敏感行业&#xff0c;晃电引发的…...

Three.js知识框架

一、Three.js 基础概念 1. Three.js 简介 是什么&#xff1f; 基于 WebGL 的 3D JavaScript 库&#xff0c;用于在浏览器中渲染 3D 场景。 核心优势 简化 WebGL 的复杂 API&#xff0c;提供高层封装。 跨平台&#xff08;支持桌面和移动端&#xff09;。 适用场景 3D 可视…...

5.14本日总结

一、英语 背诵list30&#xff0c;复习list1 二、数学 完成30讲第13讲课后题&#xff0c;学习14讲部分内容 三、408 完成计网5.1,5.2题目 四、总结 在高数14讲内容学完之前写完13讲的所有题目&#xff0c;预计20号学完14讲内容&#xff0c;408的进度要加快&#xff0c;本…...

数据结构学习之链表学习:单链表

在之前顺序表的学习过程中&#xff0c;我们知道顺序表中头插和中插的复杂度是O&#xff08;N&#xff09;。那我们可不可以将其降低为O&#xff08;1&#xff09;呢&#xff1f;可不可以不增容想用就用想扔就扔而不会浪费一点空间呢&#xff1f;那就是我们今天的内容&#xff1…...

技术债务积累,如何进行有效管理

识别和评估技术债务、明确技术债务的优先级、制定系统的还债计划、持续监控与预防技术债务产生是有效管理技术债务积累的重要策略。其中尤其要注重识别和评估技术债务&#xff0c;只有准确识别技术债务的种类和严重程度&#xff0c;才能制定出高效且有针对性的解决方案&#xf…...

[20250514] 脑机接口行业调研报告(2024年最新版)

脑机接口行业调研报告&#xff08;2024年最新版&#xff09; 1. 调研报告 2. 相关企业...

【​​HTTPS基础概念与原理​】​​SSL/TLS协议演进史:从SSLv3到TLS 1.3

以下是 SSL/TLS协议演进史 的详细解析&#xff0c;从SSLv3到TLS 1.3&#xff0c;涵盖各版本的核心特点、重大漏洞及淘汰原因&#xff1a; 1. SSLv3&#xff08;Secure Sockets Layer 3.0&#xff09; • 发布时间&#xff1a;1996年&#xff08;Netscape开发&#xff09; • 核…...

JVM 与云原生的完美融合:引领技术潮流

最近佳作推荐&#xff1a; Java 大厂面试题 – 揭秘 JVM 底层原理&#xff1a;那些令人疯狂的技术真相&#xff08;New&#xff09; Java 大厂面试题 – JVM 性能优化终极指南&#xff1a;从入门到精通的技术盛宴&#xff08;New&#xff09; Java 大厂面试题 – JVM 深度剖析&…...

【进程控制二】进程替换和bash解释器

【进程控制二】进程替换 1.exec系列接口2.execl系列2.1execl接口2.2execlp接口2.3execle 3.execv系列3.1execv3.2总结 4.实现一个bash解释器4.1内建命令 通过fork创建的子进程&#xff0c;会继承父进程的代码和数据&#xff0c;因此本质上还是在执行父进程的代码 进程替换可以将…...

如何查看打开的 git bash 窗口是否是管理员权限打开

在 git bash 中输入&#xff1a; net session >nul 2>&1 && (echo Ok) || (echo Failed) 显示 OK 》是管理员权限&#xff1b; 显示 Failed 》不是管理员权限。 如何删除此步生成的垃圾文件&#xff1a; 新建一个 .txt 文件&#xff0c;输入以下代码…...

ubuntu 22.04 wifi网卡配置地址上网

通过network-manager配置 确定是否存在usb网卡的驱动 rootgpu-server:/etc/netplan# lsmod | grep rt2800usbrt2800usb 32768 0rt2x00usb 24576 1 rt2800usbrt2800lib 139264 1 rt2800usbrt2x00lib 73728 3 rt2800us…...

让 Cursor 教我写 MCP Client

文章目录 1. 写在最前面2. 动手实现一个 MCP Client2.1 How 天气查询 Client2.1.1 向 Cursor 提问的艺术2.1.2 最终成功展示2.1.3 client 的代码 3. MCP 协议核心之一总结3.1 SSE vs WebSocket 4. 碎碎念5. 参考资料 1. 写在最前面 学习了 MCP Server 的实现后&#xff0c;刚好…...

GoogleTest:GMock2 EXPECT_CALL

GoogleTest:GMock初识-CSDN博客 简单的介绍了GMock工作的方式 GMock其实是比较复杂的,先上一个例子,然后再仔细的解读: //not_ready_class.hpp #include <string>class Person { public:virtual ~Person() = default;virtual std::string name() = 0;virtual int a…...

自注意力机制(Self-Attention)前向传播手撕

题目 实现Transformer中自注意力机制的前向传播代码 思路与代码 自注意力机制&#xff08;Self-Attention&#xff09;是自然语言处理和深度学习中的一种核心机制&#xff0c;最早在 Transformer 模型中被提出。它的核心思想是&#xff1a;让序列中的每个元素都能动态关注整个…...

华硕服务器-品类介绍

目录 一、核心产品线解析 1. 机架式服务器 2. 塔式服务器 3. 高密度计算服务器 二、关键技术与模组配置 1. 主板与管理模块 2. 电源与散热 3. 存储与网络 三、应用场景与行业解决方案 1. 人工智能与高性能计算 2. 云计算与虚拟化 3. 边缘计算与工业物联网 一、核心…...

【Ansible基础】Ansible设计理念与无代理架构深度解析

目录 1 Ansible概述与核心设计理念 1.1 Ansible的核心设计哲学 1.2 Ansible与其他配置管理工具的对比 2 Ansible无代理架构详解 2.1 无代理架构工作原理 2.2 无代理架构的优势 2.3 无代理架构的局限性 3 Ansible核心组件与架构 3.1 Ansible核心组件架构 组件说明&…...

利用vba替换word中多个表格,相邻单元格的文字

目录 一、效果图1、替换前2、替换后 二、敲代码1、开发者工具→vba编辑器&#xff0c;点击插入模块2、键入以下代码3、代码编辑完成后&#xff0c;开发者工具→运行宏&#xff0c;选择对应名称&#xff0c;运行 一、效果图 标题估计没说明白&#xff0c;上图 1、替换前 2、替…...

动态多因子策略

策略其核心思想是通过多种技术指标的结合&#xff0c;动态调整交易信号&#xff0c;以实现更精准的市场进出和风险管理。 交易逻辑思路 1. 初始化与数据更新&#xff1a; - 在每个Bar的开盘时&#xff0c;更新当日的最高价、最低价和收盘价。 - 计算短期和长期的移动平均线&…...

STC32G12K128实战:串口通信

STC32G12K128芯片写一个按键通过串口1发送字符串的程序。首先&#xff0c;确认芯片的串口1配置。STC32G系列通常使用UART1&#xff0c;相关的寄存器是P_SW1来选择引脚。默认情况下&#xff0c;UART1的TX是P3.1。 接下来是设置定时器作为波特率发生器。通常用定时器2&#xff0c…...

基于javaweb的SpringBoot高校图书馆座位预约系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

一种资源有限单片机处理cJSON数据的方法

一般单片机处理cJSON格式的数据都直接使用cJSON库&#xff0c;但对于Ram较小的单片机&#xff0c;由于资源有限&#xff0c;这并不合适&#xff0c;但我们可以根据cJSON数据的特定格式&#xff0c;使用土方法&#xff0c;直接对字符进行查找裁剪即可 //截取字符串str中字符a与…...

【2025版】Spring Boot面试题

文章目录 1. Spring, Spring MVC, SpringBoot是什么关系&#xff1f;2. 谈一谈对Spring IoC的理解3. Component 和 Bean 的区别&#xff1f;4. Autowired 和 Resource 的区别&#xff1f;5. 注入Bean的方法有哪些&#xff1f;6. 为什么Spring 官方推荐构造函数注入&#xff1f;…...

C++——类和对象(1)

文章目录 一、前言二、类和对象上2.1 类的定义2.1.1 定义格式一2.1.2 定义格式二2.1.3 注意点 2.2 访问限定符2.2.1 访问限定符的用法 2.3 类域2.4 类的实例化2.4.1 实例化的概念2.4.2 实例化具体举例2.4.3类的实例化对象大小 2.5 this指针2.5.1 this指针的概念2.5.6 this指针的…...

【行为型之观察者模式】游戏开发实战——Unity事件驱动架构的核心实现策略

文章目录 &#x1f3af; 观察者模式&#xff08;Observer Pattern&#xff09;深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码&#xff08;玩家血量监控系统&#xff09;1. 定义观察者接口与主题基类2. 实现具体主题&#xff08;玩家血量&#xff09;3. 实现…...

Java基础语法之数组

数组 一、认识数组 1.什么是数组 数组就是一个容器&#xff0c;用来存一批同种类型的数据。 举例 20, 10, 80, 60, 90 int[] arr {20, 10, 80, 60, 90};张三, 李四, 王五 String[] names {"张三", "李四", "王五"};2.为什么要使用数组 假设…...

Vue3学习(组合式API——计算属性computed详解)

目录 一、计算属性computed。 Vue官方提供的案例。(普通写法与计算属性写法) 使用计算属性computed重构——>简化描述响应式状态的复杂逻辑。 &#xff08;1&#xff09;计算属性computed小案例。 <1>需求说明。&#xff08;筛选原数组——>得新数组&#xff09; &…...

高海拔和远距离的人员识别:面部、体型和步态的融合

大家读完就觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 我们解决了在无约束环境中进行全身人体识别的问题。这个问题出现在诸如IARPA高空和远距离生物识别与身份识别&#xff08;BRIAR&#xff09;计划等监视场景中&#xff0c;其中生物识别数据是在长…...

《P2345 [USACO04OPEN] MooFest G》

题目背景 P5094 [USACO04OPEN] MooFest G 加强版 题目描述 约翰的 n 头奶牛每年都会参加“哞哞大会”。 哞哞大会是奶牛界的盛事。集会上的活动很多&#xff0c;比如堆干草&#xff0c;跨栅栏&#xff0c;摸牛仔的屁股等等。 它们参加活动时会聚在一起&#xff0c;第 i 头…...

浅浅学:DoIP工作流程及基于DoIP的诊断/刷写工具

注&#xff1a;阅读本文需要对UDS及BootLoader有一定了解&#xff0c;基础内容不做赘述。 在汽车"新四化"浪潮的推动下&#xff0c;智能座舱、自动驾驶、车路协同等创新技术正加速重构行业格局。随着车载ECU数量突破百个量级&#xff0c;软件代码量呈指数级增长——…...

首个专业AI设计Agent发布-Lovart

Lovart是什么 Lovart 是为设计师打造的世界上首个专业设计 Agent。Lovart 能像专业设计师一样思考和执行设计任务&#xff0c;提供高水平的设计方案。基于自然语言交互&#xff0c;用户能快速调整布局、颜色和构图。Lovart 支持从创意拆解到专业交付的全链路设计&#xff0c;单…...

二叉树(中序遍历)

嘿&#xff0c;欢迎来到小巫blog&#xff01;小巫又来啦&#xff01;看到你对二叉树中序遍历这道题有点困惑&#xff0c;别担心&#xff0c;我会一步步带你搞定它&#xff01;这道题是树的基础题目&#xff0c;掌握了它&#xff0c;你对树的遍历就会有很深的理解。我相信&#…...

Ubuntu 系统默认已安装 python,此处只需添加一个超链接即可

步骤 1&#xff1a;确认 Python 3 的安装路径 查看当前 Python 3 的路径&#xff1a; which python3 输出类似&#xff1a; /usr/bin/python3 步骤 2&#xff1a;创建符号链接 使用 ln -s 创建符号链接&#xff0c;将 python 指向 python3&#xff1a; sudo ln -s /usr/b…...

AcroForm JavaScript Promise 对象应用示例: 异步加载PDF文件

这段代码演示了在Adobe Acrobat DC Pro 的 JavaScript 环境中如何使用 Promise 对象处理异步操作。具体功能是&#xff1a; 定义了一个loadFile函数&#xff0c;模拟异步加载PDF文件的操作使用Promise对象封装异步操作&#xff0c;提供成功(resolve)和失败(reject)两种状态通过…...

LeetCode 热题 100 114. 二叉树展开为链表

LeetCode 热题 100 | 114. 二叉树展开为链表 大家好&#xff0c;今天我们来解决一道经典的二叉树问题——二叉树展开为链表。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求将二叉树展开为一个单链表&#xff0c;展开后的单链表应该与二叉树的先序遍历顺序相同。 问题…...