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

设计模式 Day 8:策略模式(Strategy Pattern)完整讲解与实战应用


🔄 前情回顾:Day 7 重点回顾

在 Day 7 中,我们彻底讲透了观察者模式:

它是典型的行为型模式,核心理念是“一变多知”,当一个对象状态变化时,自动通知所有订阅者。

我们通过 RxCpp 实现了工业级的事件广播系统,实现了多个模块订阅同一个数据源。

实战中,如协议解包系统、GUI 事件响应、股票系统等,都广泛采用观察者机制。

🔁 观察者模式强调“自动推送消息”,而今天我们进入策略模式,它更强调“主动选择行为”!



在这里插入图片描述

策略模式(Strategy Pattern)是行为型设计模式中最具“切换能力”的一个,它的设计哲学非常明确:

将算法(行为)抽象为可替换的策略,使得行为的改变不依赖于使用它的对象本身。

策略模式特别适合处理:

  • 多种业务逻辑切换(如支付方式)
  • 动态选择不同算法(如压缩、路径规划)
  • 可扩展、可配置的“策略中心”

本篇 Day 8,将从“动机、结构、语法、实战场景、项目代码、面试回答”六大维度,构建你对策略模式的完整掌握。


一、设计动机:为什么要用策略模式?

✅ 需求背景举例:

  • 一个支付接口,支持支付宝、微信、银行卡……你会怎么设计?
  • 一个路径规划功能,支持最短路、最便宜路径、最快路径……如何实现动态切换?

如果使用 if-else 分支写法:

if (type == "alipay") {...
} else if (type == "wechat") {...
}

✅ 缺点:

  • 不符合开闭原则
  • 不方便扩展新策略
  • 无法复用策略逻辑

这时就需要策略模式!


二、结构定义与核心要点

✅ UML 类图结构

+------------------+
|   Strategy       |<------------------------------+
+------------------+                               |
| + execute()      |                               |
+------------------+                               |/\                                          |||                                          |
+-------------------+     +-----------------------+ |
| AlipayStrategy     |     | WeChatStrategy        | |
+-------------------+     +-----------------------+ |
| + execute()        |     | + execute()           | |
+-------------------+     +-----------------------+ ||+------------------------------+     ||     PaymentContext           |-----++------------------------------+| - strategy: Strategy*        || + setStrategy(Strategy*)     || + pay()                      |+------------------------------+

✅ 角色说明

角色职责
Strategy策略接口,声明统一算法方法
ConcreteStrategy具体策略类,封装各自逻辑
Context上下文,持有当前策略对象

三、完整 C++ 实现

✅ 抽象策略接口

class PaymentStrategy {
public:virtual void pay(int amount) = 0;virtual ~PaymentStrategy() = default;
};

✅ 具体策略类

class AlipayStrategy : public PaymentStrategy {
public:void pay(int amount) override {std::cout << "使用支付宝支付: " << amount << " 元" << std::endl;}
};class WeChatStrategy : public PaymentStrategy {
public:void pay(int amount) override {std::cout << "使用微信支付: " << amount << " 元" << std::endl;}
};class CreditCardStrategy : public PaymentStrategy {
public:void pay(int amount) override {std::cout << "使用信用卡支付: " << amount << " 元" << std::endl;}
};

✅ 上下文类

class PaymentContext {
private:std::unique_ptr<PaymentStrategy> strategy_;public:void setStrategy(std::unique_ptr<PaymentStrategy> strategy) {strategy_ = std::move(strategy);}void pay(int amount) {if (strategy_)strategy_->pay(amount);elsestd::cout << "未设置支付方式!" << std::endl;}
};

✅ 使用示例

int main() {PaymentContext context;context.setStrategy(std::make_unique<AlipayStrategy>());context.pay(100);context.setStrategy(std::make_unique<WeChatStrategy>());context.pay(200);context.setStrategy(std::make_unique<CreditCardStrategy>());context.pay(300);return 0;
}

四、真实项目中策略模式的应用场景

应用领域策略角色示例
支付系统支付方式切换:微信、支付宝、银行卡
压缩服务gzip、zip、lz4 等算法策略
游戏角色AI攻击策略、防御策略、逃跑策略
电商促销系统折扣策略、满减策略、积分兑换策略
导航/路径规划最快路线、最短路线、避开拥堵路线
编解码框架JSON、XML、YAML 策略
图像处理多种滤镜、降噪算法策略

五、与状态模式、策略模式、工厂模式的对比

对比项策略模式状态模式工厂模式
意图封装行为算法,动态切换封装对象状态与行为封装创建过程,替代 new
变化点行为逻辑状态 + 行为对象类型
是否持有引用Context 中持有策略对象状态机中持有当前状态对象工厂方法中返回具体对象

六、面试表达模板 + 问答技巧

❓面试官:你用过策略模式吗?什么场景?

✅ 回答示例:

“在我们支付平台中使用了策略模式来解耦支付方式。我们定义了 PaymentStrategy 接口,具体实现了 AlipayStrategyWeChatStrategy 等类,业务调用通过 PaymentContext 设置策略并执行。策略模式让新增支付方式变得非常方便,无需改动旧逻辑,只需新增类即可。”

✅ 加分点:

  • 强调“符合开闭原则”
  • 使用 std::unique_ptr 管理生命周期
  • 提出策略配置可从配置文件加载(JSON -> 类)

七、总结回顾 + 记忆口诀

✅ 策略模式关键词:

  • 行为可切换
  • 算法封装
  • 运行时替换
  • 开闭原则
  • 模块解耦

📌 记忆口诀:

“行为封装进策略,替换逻辑不靠 if,扩展功能加新类,变化收敛更灵活。”


八、明日预告:Day 9

命令模式(Command Pattern)实战详解:解耦请求者与执行者,构建可撤销、可重做、可排队的操作系统。

相关文章:

设计模式 Day 8:策略模式(Strategy Pattern)完整讲解与实战应用

&#x1f504; 前情回顾&#xff1a;Day 7 重点回顾 在 Day 7 中&#xff0c;我们彻底讲透了观察者模式&#xff1a; 它是典型的行为型模式&#xff0c;核心理念是“一变多知”&#xff0c;当一个对象状态变化时&#xff0c;自动通知所有订阅者。 我们通过 RxCpp 实现了工业…...

HarmonyOS-ArkUI V2装饰器-@Once

前文&#xff0c;关于Param的使用&#xff1a; HarmonyOS-ArkUIV2装饰器-Param&#xff1a;组件外部输入-CSDN博客 Once装饰器是一个需要配合Param装饰器一块使用的的装饰器。它的特性是&#xff0c;仅仅在变量进行初始化的时候&#xff0c;接受一个外部传来的值进行初始化&am…...

前端Node.js的包管理工具npm指令

‌npm&#xff08;Node Package Manager&#xff09;是Node.js的包管理工具&#xff0c;主要用于安装、更新、删除和管理JavaScript包。以下是前端开发中常用的npm命令及其用途‌&#xff1a; 基本命令 npm提供了一系列命令行工具&#xff0c;用于执行各种包管理操作。以下是一…...

本地搭建直播录屏应用并实现使用浏览器远程控制直播间录屏详细教程

&#xfeff; 本文主要介绍如何在 Windows 系统电脑本地部署直播录屏工具 Bililive-go&#xff0c;并结合 cpolar 内网穿透工具实现远程访问本地 Bililive-go 服务 web 界面管理录屏任务。 相信很多小伙伴都喜欢看直播&#xff0c;不过如果一旦临时有事看不了直播&#xff0c…...

Hydra Columnar:一个开源的PostgreSQL列式存储引擎

Hydra Columnar 是一个 PostgreSQL 列式存储插件&#xff0c;专为分析型&#xff08;OLAP&#xff09;工作负载设计&#xff0c;旨在提升大规模分析查询和批量更新的效率。 Hydra Columnar 以扩展插件的方式提供&#xff0c;主要特点包括&#xff1a; 采用列式存储&#xff0c…...

OpenGL学习笔记(assimp封装、深度测试、模板测试)

目录 模型加载Assimp网格模型及导入 深度测试深度值精度深度缓冲的可视化深度冲突 模板测试物体轮廓 GitHub主页&#xff1a;https://github.com/sdpyy1 OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppL…...

自动化备份全网服务器数据平台

1.项目说明 1.1概述 该项目共分为2个子项目&#xff0c;由环境搭建和实施备份两部分组成 该项目旨在复习巩固系统服务部署使用、shell编程等知识&#xff0c;旨在让学生增加知识面&#xff0c;提高项目实习经历&#xff0c;充实简历 1.2项目组织方式及时间 时间&#xff1a…...

Trea CN多多与主流AI编程工具万字解析

Trea CN多多与主流AI编程工具万字解析 &#xff08;含数学建模、架构图、开发流程可视化&#xff09; 一、数学建模&#xff1a;代码生成效率量化模型 1.1 全链路效率公式 T total N ⋅ ( 1 λ C S ) T check (1) T_{\text{total}} N \cdot \left( \frac{1}{\lambda} \…...

Django从零搭建卖家中心注册页面实战

在电商系统开发中&#xff0c;卖家中心是一个重要的组成部分&#xff0c;而用户注册与登陆则是卖家中心的第一步。本文将详细介绍如何使用Django框架从零开始搭建一个功能完善的卖家注册页面&#xff0c;包括前端界面设计和后端逻辑实现。 一、项目概述 我们将创建一个名为sel…...

如何进行预算考核

✅ 一、预算考核体系总体架构 模块内容说明考核内容1. 预算目标/指标完成情况2. 预算编制/执行情况双轮驱动,目标 + 执行双考核考核对象高层、中层、基层、后台支持分层分类考核考核周期月度(滚动)+ 季度(校验)+ 年度(决算)提高适应性和准确性考核工具指标体系、差错率评…...

django相关面试题

django相关面试题 1.django的生命周期 2.django中的orm查询如何自定义方法 3.django中的中间件的作用 4.django中间件&#xff0c;request进来经过哪些中间件&#xff0c;顺序是怎么样的 5.django中的csrf是什么 6.django每访问一次数据库都会创建一个连接吗 7.uwsgi gunicorn…...

【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识 引言 在微服务架构中&#xff0c;分布式事务是一个不可避免的挑战。随着业务复杂度的提升&#xff0c;如何保证跨服务的数据一致性成为面试中的高频问题。本文将从基础到进…...

PostgreSQL 17深度解析(从17.0-17.4)

PostgreSQL 17自2024年9月发布以来,持续通过小版本迭代增强功能、优化性能并修复安全漏洞。本文将从17.0到17.4的每个版本切入,深度解析其新增特性、技术原理、性能提升及实践价值,帮助开发者、DBA及架构师全面掌握PostgreSQL 17的演进脉络。 一、PostgreSQL 17.0:基石奠定…...

人物4_Japanese

Now, I start my JaPan【Tokyo】 life, 【I go out of my country{China}, the reason is I want learn more new computer technologies in foreign, also it could let me know more different culture.】I like the place and most persons in here. The JaPan culture have…...

Go 语言中的 package main、 func main() 和main.go的使用规范

本文旨在解释 Go 语言中 package main 、 func main() 和main.go的关系及其使用规则&#xff0c;解决如下典型问题&#xff1a; 是否可以在一个项目中定义多个 func main()&#xff1f;是否可以在非 package main 中写 func main()&#xff1f;多个文件中都写 func main() 会冲…...

mac 终端 code 命令打开 vscode,修改 cursor占用

rm /usr/local/bin/code vim ~/.zshrc # 定义 cursor 函数&#xff0c;用于打开 Cursor 应用 function cursor {open -a "/Applications/Cursor.app" "$" }# 定义 code 函数&#xff0c;用于打开 Visual Studio Code function code {open -a "/Appli…...

【常用功能】下载文件和复制到剪切板

前言 前端人员在开发时经常会遇到&#xff1a; 后端给一个地址&#xff0c;需要去下载的需求。将页面的内容复制到剪切板 下载文件 我们先说下载文件&#xff0c;通常情况下我们会自己写上一个非常简单的工具函数。 思路如下&#xff1a; 创建一个a元素设置a元素跳转的链接…...

【ESP32-microros(vscode-Platformio)】

一、步骤 1、目前支持ESP32 2、同一个局域网 3、上位机要安装代理&#xff08;电脑或者linux设备&#xff09; 4、可直接通过USB下载&#xff0c;也可以使用官方烧录工具&#xff0c;具体的分区表地址要从USB烧录的时候日志查看&#xff0c;一共四个文件&#xff0c;第三个…...

如何使用AI辅助开发CSS3 - 通义灵码功能全解析

一、引言 CSS3 作为最新的 CSS 标准&#xff0c;引入了众多新特性&#xff0c;如弹性布局、网格布局等&#xff0c;极大地丰富了网页样式的设计能力。然而&#xff0c;CSS3 的样式规则繁多&#xff0c;记忆所有规则对于开发者来说几乎是不可能的任务。在实际开发中&#xff0c…...

OpenCV图像形态学详解

文章目录 一、什么是图像形态学&#xff1f;二、基本概念&#xff1a;结构元素三、基本形态学操作1. 腐蚀&#xff08;Erosion&#xff09;2. 膨胀&#xff08;Dilation&#xff09;3. 开运算&#xff08;Opening&#xff09;4. 闭运算&#xff08;Closing&#xff09; 四、高级…...

Java-servlet(完结篇)过滤器乱码解决与监听器

Java-servlet&#xff08;完结篇&#xff09;过滤器乱码解决与监听器 前言一、过滤器乱码解决二、监听器1. HttpSessionListener2. ServletContextListener3. ServletRequestListener 三、监听器的使用场景Java-servlet 结语 前言 在之前的 Java Servlet 学习中&#xff0c;我…...

【发布】dtns协议的js-sdk(实现a2a协议:agent2agent)

【发布】dtns协议的js-sdk&#xff08;实现a2a协议&#xff1a;agent2agent&#xff09; dtns协议简介 dtns协议是用于dtns.network分布式智体网络的通讯协议。主要目标是将各个独立的智体节点&#xff0c;通过dtns协议&#xff08;dtns.network&#xff09;连接在一起&#…...

深度学习总结(8)

模型工作流程 模型由许多层链接在一起组成&#xff0c;并将输入数据映射为预测值。随后&#xff0c;损失函数将这些预测值与目标值进行比较&#xff0c;得到一个损失值&#xff0c;用于衡量模型预测值与预期结果之间的匹配程度。优化器将利用这个损失值来更新模型权重。 下面是…...

[特殊字符] Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案

&#x1f680; Hyperlane&#xff1a;为现代Web服务打造的高性能Rust文件上传解决方案 ▎开发者必备&#xff1a;为什么选择Hyperlane处理大文件上传&#xff1f; 在实时数据爆炸式增长的时代&#xff0c;开发者面临两大核心挑战&#xff1a; 如何实现TB级大文件的可靠传输如…...

英伟达开源253B语言模型:Llama-3.1-Nemotron-Ultra-253B-v1 模型情况

Llama-3.1-Nemotron-Ultra-253B-v1 模型情况 1. 模型概述 Llama-3.1-Nemotron-Ultra-253B-v1 是一个基于 Meta Llama-3.1-405B-Instruct 的大型语言模型 (LLM)&#xff0c;专为推理、人类对话偏好和任务&#xff08;如 RAG 和工具调用&#xff09;而优化。该模型支持 128K 令…...

2025年智能合约玩法创新白皮书:九大核心模块与收益模型重构Web3经济范式

——从国库管理到动态激励的加密生态全栈解决方案 一、核心智能合约架构解析 1. 国库合约&#xff1a;生态财政中枢 作为协议的金库守卫者&#xff0c;国库合约通过多签冷钱包与跨链资产池实现资金沉淀。其创新点包括&#xff1a; 储备资产动态再平衡&#xff1a;采用预言机实…...

[250411] Meta 发布 Llama 4 系列 AI 模型 | Rust 1.86 引入重大语言特性

目录 Llama 4 家族登场&#xff1a;开启原生多模态 AI 创新新纪元Rust 1.86.0 版本发布亮点主要新特性与改进其他重要信息 Llama 4 家族登场&#xff1a;开启原生多模态 AI 创新新纪元 Meta AI 近日发布了其最新、最先进的 Llama 4 系列人工智能模型&#xff0c;标志着 AI 技术…...

缓存不只是加速器:深入理解 Redis 的底层机制

一、Redis 是什么&#xff1f;为什么我们需要它&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一种高性能的内存型键值对数据库。 通俗地讲&#xff0c;它就像一个超快的、放在内存中的超级字典&#xff0c;你可以用它来存数据、查数据&#xff0c;而…...

windows虚拟内存

windows的虚拟内存只是 虚拟内存技术的一个拓展, 叫他分页文件更好, 真正的虚拟内存是 CPU 内存管理单元 用于调度物理内存和磁盘衍生出来的技术. 在此基础上, 虚拟内存会根据页表 去物理内存中找数据, 找不到就去磁盘找, 找到之后再登记到页表. 这里的磁盘就是window系统中所…...

Ajax------免刷新地前后端交互

本文略带PHP代码需要在PHP环境下使用 介绍 AJAX (Asynchronous JavaScript and XML) 是一种创建快速动态网页应用的开发技术&#xff0c;它允许网页在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页内容。例如&#xff0c;在我们做爬虫的时候发现有些…...

python办公自动化---pdf文件的读取、添加水印

需要安装包&#xff1a;pdfminer、pypdf2 一、读取pdf中的内容 from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterprete…...

下一代数据架构全景:云原生实践、行业解法与 AI 底座 | Databend Meetup 成都站回顾

3 月底&#xff0c;Databend 2025 开年首场 Meetup 在成都多点公司成功举办&#xff01;活动特别邀请到四位重量级嘉宾&#xff1a;多点科技数据库架构师王春涛、多点DMALL数据平台负责人李铭、Databend联合创始人吴炳锡&#xff0c;以及鹏城实验室王璞博士。在春日的蓉城&…...

Kubernetes容器编排与云原生实践

第一部分&#xff1a;Kubernetes基础架构与核心原理 第1章 容器技术的演进与Kubernetes的诞生 1.1 虚拟化技术的三次革命 物理机时代&#xff1a;资源浪费严重&#xff0c;利用率不足15% 虚拟机突破&#xff1a;VMware与Hyper-V实现硬件虚拟化&#xff0c;利用率提升至50% …...

vue项目使用html2canvas和jspdf将页面导出成PDF文件

一、需求&#xff1a; 页面上某一部分内容需要生成pdf并下载 二、技术方案&#xff1a; 使用html2canvas和jsPDF插件 三、js代码 // 页面导出为pdf格式 import html2Canvas from "html2canvas"; import jsPDF from "jspdf"; import { uploadImg } f…...

JAVA实现在H5页面中点击链接直接进入微信小程序

在普通的Html5页面中如何实现点击URL链接直接进入微信小程序&#xff0c;不需要扫描小程序二维码&#xff1f; 网上介绍的很多方法是在小程序后台设置Schema&#xff0c;不过我进入我的小程序后台在开发设置里面 没有找到设置小程序Schema的地方&#xff0c;我是通过调用API接口…...

深入剖析 Kafka 的零拷贝原理:从操作系统到 Java 实践

Kafka 作为一款高性能的分布式消息系统&#xff0c;其卓越的吞吐量和低延迟特性得益于多种优化技术&#xff0c;其中“零拷贝”&#xff08;Zero-Copy&#xff09;是核心之一。零拷贝通过减少用户态与内核态之间的数据拷贝&#xff0c;提升了 Kafka 在消息传输中的效率。本文将…...

深度学习:AI 大模型时代的智能引擎

当 Deepspeek 以逼真到难辨真假的语音合成和视频生成技术横空出世&#xff0c;瞬间引发了全球对 AI 伦理与技术边界的激烈讨论。从伪造名人演讲、制造虚假新闻&#xff0c;到影视行业的特效革新&#xff0c;这项技术以惊人的速度渗透进大众视野。但在 Deepspeek 强大功能的背后…...

【Flask开发】嘿马文学web完整flask项目第4篇:4.分类,4.分类【附代码文档】

教程总体简介&#xff1a;2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 Json Web Token(JWT) 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目…...

【MySQL】002.MySQL数据库基础

文章目录 数据库基础1.1 什么是数据库1.2 基本使用创建数据库创建数据表表中插入数据查询表中的数据 1.3 主流数据库1.4 服务器&#xff0c;数据库&#xff0c;表关系1.5 MySQL架构1.6 SQL分类1.7 存储引擎1.7.1 存储引擎1.7.2 查看存储引擎1.7.3 存储引擎对比 前言&#xff1a…...

Python爬取视频的架构方案,Python视频爬取入门教程

文章目录 前言方案概述架构设计详细实现步骤1.环境准备2. 网页请求模块3. 网页解析模块4. 视频下载模块5. 异常处理与日志模块 代码示例&#xff1a;性能优化注意事项 前言 以下是一个全面的使用 Python 爬取视频的架构方案&#xff0c;包含方案概述、架构设计、详细实现步骤、…...

ERC-20 代币标准

文章目录 一、什么是 ERC-20&#xff1f;核心价值&#xff1a;互操作性简化开发生态基石 二、ERC-20 的六大核心功能基础功能授权与代理转账事件通知 三、ERC-20 代币的典型应用场景四、ERC-20 的技术优势与局限性优势&#xff1a;局限性&#xff1a; 五、ERC-20 代币的创建步骤…...

SpringBoot实战1

SpringBoot实战1 一、开发环境&#xff0c;环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 &#xff08;1&#xff09;导入SpringBoot项目开发所需要的依赖 一个父依赖&#xff1a;&#xff08;工件ID为&#xff1a;spring-boot-starter-parent&#xf…...

GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析

论文地址:https://arxiv.org/pdf/2407.00906 1. 论文概述 《GSO-YOLO: Global Stability Optimization YOLO for Construction Site Detection》提出了一种针对建筑工地复杂场景优化的目标检测模型。通过融合全局优化模块(GOM)​、稳定捕捉模块(SCM)​和创新的AIoU损失函…...

解读json.loads函数参数

json.loads()函数是解码JSON字符串为Python对象的核心工具。本文将深入探讨json.loads()函数的各个参数。 一、基本功能与输入类型 1. 功能概述 json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=N…...

2025.04.10-拼多多春招笔试第一题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 神奇公园的福娃占卜 问题描述 LYA在一个神奇的公园里发现了一条特殊的小径,小径上排列着一群可爱的福娃玩偶。这条小径有 n n...

【学习笔记】CPU 的“超线程”是什么?

1. 什么是超线程&#xff1f; 超线程&#xff08;Hyper-Threading&#xff09;是Intel的技术&#xff0c;让一个物理CPU核心模拟出两个逻辑核心。 效果&#xff1a;4核CPU在系统中显示为8线程。 本质&#xff1a;通过复用空闲的硬件单元&#xff08;如ALU、FPU&#xff09;&a…...

Docker Harbor

下载Harbor安装包 wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz 解压安装包 tar xvf harbor-offline-installer-v2.5.0.tgz cd harbor 配置harbor vi harbor.yml hostname: registry.example.com # Harbor …...

天梯集训笔记整理

1.着色问题 直接标注哪些行和列是被标注过的&#xff0c;安全格子的数量就是未标注的行*列 #include <bits/stdc.h> using namespace std;const int N 1e510; int hang[N],lie[N];int main(){int n,m;cin>>n>>m;int q;cin>>q;while(q--){int x,y;ci…...

C语言复习笔记--指针(4)

在经过前几篇的复习后我们已经了解了大部分指针的类型,今天让我们继续复习指针的其他内容吧. 函数指针变量 函数指针变量的创建 什么是函数指针变量呢&#xff1f;函数指针变量应该是⽤来存放函数地址的&#xff0c;未来通过地址能够调⽤函数的。 那么函数是否有地址呢&#x…...

008二分答案+贪心判断——算法备赛

二分答案贪心判断 有些问题&#xff0c;从已知信息推出答案&#xff0c;细节太多&#xff0c;过程繁杂&#xff0c;不易解答。 从猜答案出发&#xff0c;贪心地判断该答案是否合法是个不错的思路&#xff0c;这要求所有可能的答案是单调的&#xff08;例&#xff1a;x满足条件…...