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

C++17中的LegacyContiguousIterator(连续迭代器)

image.png

文章目录

    • 特点
      • 内存连续性
      • 与指针的兼容性
      • 更高的性能
    • 适用场景
      • 与C接口交互
      • 高性能计算
    • 支持连续迭代器的容器
    • 示例代码
    • 性能优势
      • 缓存局部性
      • 指针算术优化
    • 注意事项
    • 总结

在C++17标准里,LegacyContiguousIterator(连续迭代器)是一类特殊的迭代器。它不仅具备随机访问迭代器的功能,还额外保证了逻辑上相邻的元素在物理内存中也是相邻存储的。这一特性让连续迭代器在一些特定场景下比普通的随机访问迭代器表现更为出色。

特点

内存连续性

连续迭代器所指向的元素在内存里是连续存放的,这种存储方式和数组极为相似。就如同数组中的元素一个挨着一个地存放在一段连续的内存空间中,连续迭代器操作的元素也遵循这样的存储规则。这种内存连续性为后续的操作提供了很多便利,例如在进行数据访问和处理时可以更高效地利用内存。

与指针的兼容性

连续迭代器能够像指针一样进行指针算术运算。例如可以使用 std::addressof(*it) + offset 这样的操作,这里的 it 是连续迭代器,offset 是偏移量。这意味着可以将连续迭代器当作指针来使用,利用指针的特性进行高效的内存访问和操作,极大地增强了代码的灵活性。

更高的性能

由于内存的连续性,连续迭代器在某些操作中能够提供更高的性能。以缓存局部性优化为例,当CPU访问内存中的数据时,会将相邻的数据一起加载到缓存中。因为连续迭代器指向的元素在内存中是连续的,所以在访问这些元素时,CPU缓存的命中率会更高,从而减少了从内存中读取数据的时间,提高了程序的运行效率。

适用场景

与C接口交互

在很多情况下,需要将C++迭代器传递给基于指针的C接口。由于C语言主要使用指针来操作内存和数据,而连续迭代器与指针具有良好的兼容性,所以可以无缝地将连续迭代器转换为指针传递给C接口,避免了复杂的数据转换和额外的性能开销。

高性能计算

在高性能计算领域,缓存局部性是一个非常重要的因素。当需要利用缓存局部性来提升性能时,连续迭代器的优势就体现得淋漓尽致。因为连续迭代器所指向的元素在内存中是连续的,所以在进行数据处理时,能够更高效地利用CPU缓存,减少内存访问延迟,从而显著提升程序的性能。

支持连续迭代器的容器

在C++标准库中,std::vectorstd::string 的迭代器是连续迭代器的典型代表。这两个容器的元素在内存中都是连续存储的,因此它们的迭代器满足LegacyContiguousIterator的要求。

  • std::vectorstd::vector 是一个动态数组,它会在内存中分配一段连续的空间来存储元素。当元素数量增加时,std::vector 会重新分配更大的内存空间,并将原有元素复制到新的内存中,但在同一时刻,其元素始终是连续存储的。
  • std::stringstd::string 本质上也是一个字符序列,它同样会在内存中连续存储字符元素。因此,std::string 的迭代器也具备连续迭代器的特性。

示例代码

以下是一个简单的示例,展示了如何使用连续迭代器:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};auto it = vec.begin();// 使用连续迭代器进行指针算术int* ptr = &(*it); // 获取指向第一个元素的指针std::cout << "Element at offset 2: " << *(ptr + 2) << std::endl; // 输出3return 0;
}

在上述代码中,首先创建了一个 std::vector 容器 vec,并初始化了一些元素。然后获取了 vec 的起始迭代器 it。接着通过 &(*it) 将迭代器转换为指针 ptr,最后使用指针算术运算 ptr + 2 访问偏移量为2的元素并输出。

性能优势

与普通随机访问迭代器相比,连续迭代器的性能优势主要体现在以下两个方面:

缓存局部性

由于连续迭代器所指向的元素在内存中是连续的,当CPU访问其中一个元素时,会将相邻的元素一起加载到缓存中。这样,在后续访问相邻元素时,就可以直接从缓存中获取数据,而不需要再次访问内存,大大提高了CPU缓存的命中率,减少了内存访问延迟,从而提升了程序的性能。

指针算术优化

连续迭代器支持高效的指针算术操作。因为其元素在内存中是连续存储的,所以可以通过简单的指针偏移来访问相邻元素,避免了不必要的内存分配和拷贝操作。这种直接的内存访问方式减少了中间环节,提高了操作的效率。

注意事项

虽然LegacyContiguousIterator提供了强大的功能,但并不是所有容器都支持它。例如,std::deque 虽然是一个随机访问容器,但它的元素在内存中并不是连续存储的。std::deque 是由多个固定大小的数组块组成,每个数组块内部元素是连续的,但不同数组块之间在内存中可能不相邻。因此,std::deque 的迭代器不满足连续迭代器的要求。

总结

LegacyContiguousIterator是C++17引入的一种特殊迭代器,它结合了随机访问迭代器的功能和内存连续性的优势。在需要高性能和与C接口交互的场景中,连续迭代器能够发挥重要作用,是现代C++编程中一个非常实用的工具。但在使用时,需要注意并非所有容器都支持连续迭代器,要根据具体的需求选择合适的容器和迭代器。

相关文章:

C++17中的LegacyContiguousIterator(连续迭代器)

文章目录 特点内存连续性与指针的兼容性更高的性能 适用场景与C接口交互高性能计算 支持连续迭代器的容器示例代码性能优势缓存局部性指针算术优化 注意事项总结 在C17标准里&#xff0c;LegacyContiguousIterator&#xff08;连续迭代器&#xff09;是一类特殊的迭代器。它不仅…...

Linux-文件IO

1.open函数 【1】基本概念和使用 #include <fcntl.h> int open(const char *pathname&#xff0c;int flags); int open(const char *pathname&#xff0c;int flags&#xff0c;mode_t mode); 功能: 打开或创建文件 参数: pathname //打开的文件名 f…...

DeepSeek-R1 + Cherry Studio 本地部署打造个人 AI 知识库

ChatGPT 爆火的时候&#xff0c;我心里就燃起了一个想法&#xff1a;打造一个专属于自己的AI知识库&#xff0c;它就像我的第二大脑一样&#xff0c;能记住我生活里的点点滴滴。 我随口一问“去年5月我做了什么”&#xff0c;它不仅能精准找到记录&#xff0c;还能帮我回忆起那…...

《红色警戒:兵临城下》 游戏软件安装步骤与百度网盘链接

软件简介&#xff1a; 《红色警戒&#xff1a;兵临城下》&#xff08;Command & Conquer: Red Alert&#xff09;是一款经典的即时战略游戏&#xff0c;由Westwood Studios开发&#xff0c;于1996年首次发行。它是《命令与征服》系列的衍生作品&#xff0c;以其独特的世界…...

25/2/16 <算法笔记> DirectPose

DirectPose 是一种直接从图像中预测物体的 6DoF&#xff08;位姿&#xff1a;6 Degrees of Freedom&#xff09;姿态 的方法&#xff0c;包括平移和平面旋转。它在目标检测、机器人视觉、增强现实&#xff08;AR&#xff09;和自动驾驶等领域中具有广泛应用。相比于传统的位姿估…...

第32周:文献阅读

目录 摘要 Abstract 文献阅读 问题引入 研究问题 研究意义 研究方法 集成方法 随机森林&#xff08;RF&#xff09; 支持向量机&#xff08;SVM&#xff09; 简单循环神经网络&#xff08;SimpleRNN&#xff09; 长短期记忆网络&#xff08;LSTM&#xff09; 创…...

Ollama 开发指南

文章来源&#xff1a;开发指南 - Ollama中文文档|Ollama官方文档 安装先决条件&#xff1a; GOC/C 编译器&#xff0c;例如 macOS 上的 Clang、TDM-GCC &#xff08;Windows amd64&#xff09; 或 llvm-mingw &#xff08;Windows arm64&#xff09;、Linux 上的 GCC/Clang。…...

【deepseek与chatGPT辩论】辩论题: “人工智能是否应当具备自主决策能力?”

探讨辩论题 这个提案涉及创建一个精确的辩论题目&#xff0c;旨在测试deepseek的应答能力。 创建辩论题目 提议设计一个辩论题目以测试deepseek的应答能力。希望这个题目具有挑战性并能够测量其回应质量。 好的&#xff0c;来一道适合深度学习的辩论题&#xff1a; 辩论题&…...

神经网络常见激活函数 9-CELU函数

文章目录 CELU函数导函数函数和导函数图像优缺点pytorch中的CELU函数tensorflow 中的CELU函数 CELU 连续可微指数线性单元&#xff1a;CELU&#xff08;Continuously Differentiable Exponential Linear Unit&#xff09;,是一种连续可导的激活函数&#xff0c;结合了 ELU 和 …...

JavaScript系列(74)--反射API详解

JavaScript反射API详解 &#x1f50d; JavaScript的反射API提供了强大的运行时检查和操作对象的能力。本文将深入探讨Reflect API的原理、应用场景和最佳实践。 反射基础 &#x1f31f; &#x1f4a1; 小知识&#xff1a;反射是指程序在运行时能够检查、修改自身结构和行为的…...

轻量级分组加密算法RECTANGLE

轻量级分组加密算法RECTANGLE RECTANGLE轻量级分组密码算法是Wentao Zhang&#xff0c;Zhenzhen Bao,Dongdai Lin等学者于2014年提出的&#xff0c;该算法是SPN结构的&#xff0c;采用了线性移位的置换层以及44bit的S盒。RECTANGLE是一个迭代分组密码&#xff0c;分组长度为64…...

智能设备监控:AI 与 Python 助力设备管理的未来

智能设备监控:AI 与 Python 助力设备管理的未来 引言 随着物联网(IoT)和智能设备的广泛应用,我们的日常生活逐渐离不开这些高科技产品。从智能家居到工业控制,智能设备已经渗透到各个领域。然而,随着设备种类和数量的增加,如何高效地监控这些设备,确保它们的稳定性和…...

python语言进阶之函数

目录 前言 函数的创建和调用 函数创建 调用函数 参数传递 形式参数和实际参数 位置参数 数量必须与定义时一致 位置必须与定义时一致 关键字参数 为参数设置默认值 可变参数 **parameter 返回值 变量的作用域 局部变量 全局变量 匿名函数 前言 提到函数&…...

Golang Model 字段自动化校验设计

背景 在我们日常开发中&#xff0c;不可避免的总要去进行各种参数校验&#xff0c;但是如果在某个场景中&#xff0c;要校验的字段非常多&#xff0c;并且在其中还有耦合关系&#xff0c;那么我们手写校验逻辑就变得非常的低效且难以维护。本篇文档就基于 DDD 领域模型设计的思…...

Hot100 堆

215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 堆排序 我们可以借助一个小顶堆来维护当前堆内元素的最小值&#xff0c;同时保证堆的大小为 k&#xff1a; 遍历数组将元素入堆&#xff1b; 如果当前堆内元素超过 k 了&#xff0c;我们就把堆顶元素去除…...

AIGC图生视频保姆级教程

一、AI文生图高阶技巧 推荐工具 ▸ MidJourney&#xff08;艺术感最强&#xff09; ▸ DALLE 3&#xff08;与ChatGPT深度联动&#xff09; ▸ Leonardo.ai&#xff08;精细化参数控制&#xff09; 核心策略 提示词架构&#xff1a; [主体描述][环境氛围][镜头语言][风格参数…...

Qt QDateTimeEdit总结

1. 概述 QDateTimeEdit 是 Qt 提供的用于编辑日期和时间的控件&#xff0c;支持直接输入或通过弹出日历/时间选择器调整值。继承自 QAbstractSpinBox&#xff0c;是 QDateEdit 和 QTimeEdit 的父类&#xff0c;可同时处理日期和时间。默认显示格式为系统本地化的日期时间格式&…...

【吾爱出品】 视频批量分段工具

视频批量分段工具 链接&#xff1a;https://pan.xunlei.com/s/VOJDvtHQE7GOiJ84WNea5Ay1A1?pwd5nta# 选择视频文件 启动程序后&#xff0c;点击 "文件" 菜单下的 "选择视频文件" 按钮&#xff0c;或者直接将视频文件拖放到程序窗口中的视频列表区域。支…...

SHEIN的迁移与无奈

日前&#xff0c;因杭州宇树科技、DeepSeek的“六小龙”企业崛起&#xff0c;不少地方开始反思&#xff0c;为什么本地没有留住创始人&#xff0c;或者发展出类似的企业。例如DeepSeek创始人梁文锋和Kimi创始人杨植麟都是广东人&#xff0c;但都在其他地区创业成功。而还有媒体…...

TCP/UDP 简介,三次握手与四次挥手

一、TCP 三次握手 目的&#xff1a;为了解决在不可靠的信道上建立可靠的网络连接 三次握手是连接请求的过程&#xff1a; A 发送连接请求的数据给 B&#xff08;发送 SYN 包&#xff09; B 同意连接&#xff0c;返回数据给 A&#xff08;返回 SYNACK 包&#xff09; A 收到后回…...

Windows Defender Control--禁用Windows安全中心

Windows Defender Control--禁用Windows安全中心 链接&#xff1a;https://pan.xunlei.com/s/VOJDuy2ZEqswU4sEgf12JthZA1?pwdtre6#...

数据仓库与数据湖的协同工作:智慧数据管理的双引擎

数据仓库与数据湖的协同工作:智慧数据管理的双引擎 引言 在数据驱动的今天,企业和组织收集和存储的数据量正以惊人的速度增长。如何高效管理和利用这些数据,成为了决策者和技术专家的共同难题。为了解决这一问题,数据仓库(Data Warehouse)和数据湖(Data Lake)这两种技…...

50. c++多维数组

在‘19 数组’中描述了原生数组的本质和其索引的原理&#xff0c;一维数组是连续的一个内存块&#xff0c;本质就是指针&#xff0c;指向这个内存块的起始位置&#xff0c;索引的原理就是对该指针的操作。通常对数组的操作一种策略就是使用指针&#xff0c;二维数组可以说是数组…...

用大模型学大模型05-线性回归

deepseek.com:多元线性回归的目标函数&#xff0c;损失函数&#xff0c;梯度下降 标量和矩阵形式的数学推导&#xff0c;pytorch真实能跑的代码案例以及模型,数据&#xff0c;预测结果的可视化展示&#xff0c; 模型应用场景和优缺点&#xff0c;及如何改进解决及改进方法数据推…...

苹果CMS站群插件的自动生成功能:提升网站流量的秘诀

引言 在数字营销的浪潮中&#xff0c;站群技术因其强大的流量引导能力而备受青睐。苹果CMS作为一款优秀的内容管理系统&#xff0c;凭借其灵活性和可扩展性&#xff0c;成为了站群管理的理想选择。本文将详细介绍苹果CMS站群插件的自动生成功能&#xff0c;探讨如何通过这一功…...

大语言模型中one-hot编码和embedding之间的区别?

1. 维度与稀疏性 One-Hot编码 定义&#xff1a;每个词被表示为一个高维稀疏向量&#xff0c;维度等于词汇表大小。例如&#xff0c;词汇表有10,000个词&#xff0c;每个词对应一个10,000维的向量&#xff0c;其中仅有一个位置为1&#xff08;表示当前词&#xff09;&#xff0…...

【Bluedroid】 BLE连接源码分析(一)

BLE链接过程分析见【Bluedroid】BLE连接过程详解-CSDN博客,本篇主要围绕HCI_LE_Create_Connection展开。基于Android14源码进行分析。在蓝牙低功耗技术中,设备之间建立连接是进行数据传输等操作的前提。HCI LE Extended Create Connection Command 提供了一种更灵活、功能更丰…...

【C语言】移除元素

移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后…...

SQL与数据库程序设计

1.1986年&#xff0c;10月美国国家标准局颁布了SQL语言的美国标准&#xff0c;称为SQL86 2.SQL(Structured Query Language)又称为结构化查询语言 3.建立索引的主要目的是加快查找的速度 4.在基本表上建立一个或者多个索引 5. 一个基本表是最多只能建立一个聚簇索引 6.CAL…...

基于Java企业项目管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Blazor-设置组件焦点

在Razor中设置焦点我们需要用到ElementReference类型的变量&#xff0c;使用ref指令引用到设置焦点HTML的元素。 在Blazor中&#xff0c;ElementReference类型的作用是提供对HTML DOM元素的引用&#xff0c;以便在C#代码中通过JavaScript互操作&#xff08;JS Interop&#xff…...

信用违约掉期(Credit Default Swap, CDS):金融市场的“保险”还是“定时炸弹”?(中英双语)

信用违约掉期&#xff08;CDS&#xff09;&#xff1a;金融市场的“保险”还是“定时炸弹”&#xff1f; 引言 信用违约掉期&#xff08;Credit Default Swap, CDS&#xff09; 是金融市场中一种重要的衍生品&#xff0c;它最初被设计为债务违约的保险工具&#xff0c;但在实…...

Deepseek R1模型本地化部署与API实战指南:释放企业级AI生产力

摘要 本文深入解析Deepseek R1开源大模型的本地化部署流程与API集成方案&#xff0c;涵盖从硬件选型、Docker环境搭建到模型微调及RESTful接口封装的完整企业级解决方案。通过电商评论分析和智能客服搭建等案例&#xff0c;展示如何将前沿AI技术转化为实际生产力。教程支持Lin…...

核货宝多语言订货系统:打破语言障碍,拓展全球市场

在经济全球化的大背景下&#xff0c;企业的业务版图不断向全球扩张&#xff0c;国际贸易活动日益频繁。对于众多从事跨境贸易、跨国批发零售以及拥有广泛海外客户群体的企业而言&#xff0c;一款能够跨越语言障碍的多语言订货系统&#xff0c;已成为其在全球市场竞争中脱颖而出…...

【prompt示例】智能客服+智能质检业务模版

本文原创作者&#xff1a;姚瑞南 AI-agent 大模型运营专家&#xff0c;先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗&#xff1b;多年人工智能行业智能产品运营及大模型落地经验&#xff0c;拥有AI外呼方向国家专利与PMP项目管理证书。&#xff08;转载需经授权&am…...

在linux系统中安装Anaconda,并使用conda

系统 : ubuntu20.04 显卡&#xff1a;NVIDIA GTX1650 目录 安装Anaconda第一步&#xff1a;下载合适版本的Anconda1. 查看自己Linux的操作系统及架构命令&#xff1a;uname -a2. 下载合适版本的Anconda 第二步&#xff1a;安装Aanconda1. 为.sh文件设置权限2. 执行.sh文件2.1 .…...

基于 openEuler 构建 LVS-DR 群集

1、环境准备 准备好下面四台台服务器&#xff1a; 主机名IP角色openEuler-1192.168.121.11Director ServeropenEuler-2192.168.121.12Real Server1openEuler-3192.168.121.13Real Server2Rocky8192.168.121.51Client 2、Web服务器配置 在两台RS上安装并配置nginx服务&#…...

委托构造函数与继承构造函数

委托构造函数 允许同一类中的构造函数调用另一个构造函数&#xff0c;以复用初始化逻辑。 委托构造函数不能同时初始化成员变量&#xff0c;只能委托给其他构造函数。 避免循环委托&#xff08;如构造函数A委托给B&#xff0c;B又委托给A&#xff09;。 class MyClass { pu…...

EPLAN 自定义图框

一 &#xff0c; 还是先打开系统自带的图框&#xff0c;作为参考 二&#xff0c; 自定义图框 1. 新建图框 2. 绘制。下图描述有误&#xff0c;直接将系统默认图框文件复制&#xff0c;然后重命名&#xff0c;在这个基础上来进行编辑。 三&#xff0c; 使用 1. 更改默认图框 2…...

c++ gcc工具链

GCC&#xff08;GNU Compiler Collection&#xff09;是一套广泛使用的开源编译工具链&#xff0c;支持多种编程语言&#xff08;如 C、C、Objective-C、Fortran 等&#xff09;&#xff0c;主要用于 Linux 和嵌入式开发环境。 组成 GCC 工具链主要由以下几个核心工具组成&am…...

基于51单片机的的鸡笼补光和恒温系统的设计与实现(源程序+Protues仿真+电路图+元件清单+器件手册)

编号&#xff1a;71 基于51单片机的的鸡笼补光和恒温系统的设计与实现 功能描述&#xff1a; 本设计由89C52单片机液晶12864显示模块声光报警电路温湿度传感器电路风扇电路LED照明电路光照检测电路GSM电路DS1302时钟电路 1.实现的功能 (1)采用DHT11温湿传感器、光敏电阻捕捉…...

es-head 正则查询和标准正则查询的差异

在es-head里面查询&#xff0c;需要查询字符串是一个json串&#xff0c;因此就要符合json串的格式&#xff0c;在es-head里面可以通过regexp做正则查询&#xff0c;而这里的正则表达式其实是写成字符串的形式的&#xff0c;因此就要面对字符串转义的问题&#xff0c;比如你想匹…...

【深度学习】深度学习和强化学习算法——深度 Q 网络DQN

深度 Q 网络&#xff08;Deep Q-Network, DQN&#xff09; 详解 什么是DQNDQN 的背景DQN 训练流程 2 DQN 的核心思想2.1 经验回放&#xff08;Experience Replay&#xff09;2.2 目标网络&#xff08;Target Network&#xff09;2.3 ε-贪心策略&#xff08;ε-Greedy Policy&a…...

matlab模拟风场的随机脉动风

1、内容简介 matlab137-模拟风场的随机脉动风 可以交流、咨询、答疑 2、内容说明 略 模拟风场的随机脉动风&#xff0c;并进行相关的统计分析和计算&#xff0c;包括风速谱、空间相关性、自谱、互谱、以及POD&#xff08;Proper Orthogonal Decomposition&#xff09;分解等…...

2025年2月16日(numpy-deepseek)

嗯&#xff0c;用户让我介绍一下这段使用numpy的代码。首先&#xff0c;我需要确认用户的需求是什么。他们可能刚开始学习Python或者数据科学&#xff0c;所以需要基础的解释。让我仔细看一下代码。 第一行是import numpy as np&#xff0c;这应该是导入numpy库&#xff0c;并…...

x64和ARM的区别

x64和ARM是两种不同的处理器架构&#xff0c;它们在指令集、设计理念、应用场景和能耗效率等方面存在显著差异。以下是它们之间的主要区别&#xff1a; 1. **指令集架构**&#xff1a; * **x64**&#xff1a;x64架构&#xff0c;也称为x86-64或AMD64&#xff0c;是x86架…...

电解电容的参数指标

容量 这个值通常是室温25℃&#xff0c;在一定频率和幅度的交流信号下测得的容量。容量会随着温度、直流电压、交流电压值的变化而改变。 额定电压 施加在电容上的最大直流电压&#xff0c;通常要求降额使用。 例如额定电压是4V&#xff0c;降额到70%使用&#xff0c;最高施…...

如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题

在安装Qt时&#xff0c;遇到了一些问题&#xff0c;尤其是在Mac上安装Qt后&#xff0c;发现Qt Creator没有出现在应用程序中。通过一些搜索和操作&#xff0c;最终解决了问题。以下是详细的记录和解决方法。 1. 安装Qt后未显示Qt Creator 安装完成Qt后&#xff0c;启动应用程…...

Spring——Spring开发实战经验(1)

摘要 文章主要介绍了 Swagger 作为 API 文档生成和测试工具的功能&#xff0c;包括自动生成 API 文档、提供可视化调试界面、促进前后端协作、支持 OpenAPI 规范等。同时&#xff0c;还提及了 Spring Boot 与 Swagger3 的实战应用&#xff0c;以及 Spring 开发中其他相关技术内…...

设计模式:代理模式

代理模式是很常见的设计模式&#xff0c;即使没有专门学习过这种设计模式&#xff0c;在工作中也一定用过这种设计模式。在实际生活中&#xff0c;代理模式也是常见的&#xff0c;比如内阁首辅相对于皇帝&#xff0c;前者是后者的代理&#xff0c;内阁首辅收到奏折时&#xff0…...