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

C++ 表驱动方法代替if-else

连着用几十个if-else代码,运行效率不高,关键还手累,记得改成表驱动方法

#include <iostream>
#include <unordered_map>
#include <functional>using namespace std;void handleCondition1()
{// 处理条件 1 的代码std::cout << "Handling condition 1." << std::endl;
}void handleCondition2()
{// 处理条件 2 的代码std::cout << "Handling condition 2." << std::endl;
}void handleCondition3()
{// 处理条件 3 的代码std::cout << "Handling condition 3." << std::endl;
}int main()
{std::unordered_map<std::string, std::function<void()>> conditionTable;// 将条件和相应的处理函数添加到映射表中conditionTable["condition1"] = handleCondition1;conditionTable["condition2"] = handleCondition2;conditionTable["condition3"] = handleCondition3;std::string condition = "condition2"; // 假设条件为 "condition2"// 根据给定的条件查找并调用相应的处理函数if (conditionTable.find(condition) != conditionTable.end()){conditionTable[condition](); // 调用相应的处理函数}else{// 如果条件不在映射表中的处理代码std::cout << "No matching handler for condition:"<< condition.c_str() << std::endl;}return 0;
}

在上面的示例中,我们使用了 std::unordered_map 来创建条件和处理函数之间的映射表。键的类型是 std::string,值的类型是 std::function<void()>,它是一个可调用对象的封装,对应于无参数且返回类型为 void 的函数。

我将条件作为键,将相应的处理函数作为值添加到映射表中。然后,我们通过查找映射表来判断给定的条件是否存在,并调用相应的处理函数。如果条件不在映射表中,则执行相应的处理代码。

请注意,此示例仅演示了基本的表驱动方法的实现。根据实际需求,您可能需要进行适当的错误处理或对表驱动方法进行更复杂的设计。


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/VsFMs

相关文章:

C++ 表驱动方法代替if-else

连着用几十个if-else代码&#xff0c;运行效率不高&#xff0c;关键还手累,记得改成表驱动方法 #include <iostream> #include <unordered_map> #include <functional>using namespace std;void handleCondition1() {// 处理条件 1 的代码std::cout <<…...

2023国赛数学建模E题思路分析 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c; 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…...

cadence后仿真/寄生参数提取/解决pin口提取不全的问题

post-simulation设置顺序与规则 1.Rules 设置 2.inputs设置 3.outputs设置 4.PEX 设置 会出现错误1&#xff0c;后有解决方案 第一步 :Netlist 第二步&#xff1a;LVS 5.RUN PEX 先RUN&#xff0c;后按照图中1 2 3步骤操作 点击OK之后&#xff0c;显示Calibre信息&#xff…...

Vue中实现3D得球自动旋转

具体实现 安装echarts 在终端下安装echarts npm install -D echarts 安装echarts-gl 在终端下安装echarts-gl npm install -D echarts-gl earth3D组件 earth3D.vue <template><div class"globe3d-earth-container" ><div class"globe3d-earth&qu…...

使用wkhtmltoimage实现生成长图分享

需求 用户可以选择以长图的形式分享本网页 方法 wkhtmltopdf wkhtmltopdf url filewkhtmltoimage url file java Runtime.getRuntime().exec() 下载 直接去官网下载对应的版本&#xff1a;官网 命令行使用WK > wkhtmltopdf https://www.nowcoder.com /opt/project/…...

新风机未来什么样?

新风机在未来将会有许多令人期待的发展和改进&#xff0c;让我们一起来看一看吧&#xff01;以下是新风机未来的一些可能性&#xff1a; 智能化和智能家居&#xff1a;新风机将更多地与智能家居系统整合&#xff0c;通过物联网和人工智能技术&#xff0c;实现智能控制和智能调节…...

python的几种数据类型的花样玩法(一)

Python是一种动态类型语言&#xff0c;这意味着在Python中&#xff0c;你可以操作多种不同的数据类型&#xff0c;而且这些数据类型可以自动转换。以下是一些Python数据类型的花样玩法&#xff1a; 数字&#xff1a; 整数 (1, 100, -786 等) 浮点数 (1.1, -78.4, 3.14159 等)…...

python回调函数之获取jenkins构建结果

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 需求背景&#xff1a; 现在用jenkins构建自动化测试&#xff08;2个job&#xff09;&#xff0c;公司现将自动化纳入到发布系统 要求每次构建成功之后&am…...

Docker底层实现

Docker采用c/s架构&#xff0c;Docker守护进程&#xff08; Daemon &#xff09;作为服务端&#xff0c;接受来自客户端&#xff08;命令行&#xff09;的请求&#xff0c;并处理这些请求&#xff08;创建、运行、分发容器&#xff09; 。客户端和服务端既可以运行在一个机器上…...

PY32F003F18之RS485通讯

PY32F003F18将USART2连接到RS485芯片&#xff0c;和其它RS485设备实现串口接收后再转发的功能。 一、测试电路 二、测试程序 #include "USART2.h" #include "stdio.h" //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf() #include "…...

概率论与数理统计学习笔记(7)——全概率公式与贝叶斯公式

目录 1. 背景2. 全概率公式3. 贝叶斯公式 1. 背景 下图是本文的背景内容&#xff0c;小B休闲时间有80%的概率玩手机游戏&#xff0c;有20%的概率玩电脑游戏。这两个游戏都有抽卡环节&#xff0c;其中手游抽到金卡的概率为5%&#xff0c;端游抽到金卡的概率为15%。已知小B这天抽…...

深入了解 Axios 的 put 请求:使用技巧与最佳实践

在前端开发中&#xff0c;我们经常需要与后端服务器进行数据交互。其中&#xff0c;PUT 请求是一种常用的方法&#xff0c;用于向服务器发送更新或修改数据的请求。通过发送 PUT 请求&#xff0c;我们可以更新服务器上的资源状态。 Axios 是一个流行的 JavaScript 库&#xff0…...

浅谈Http协议、TCP协议(转载)

TCP标志位,有6种标示&#xff1a;SYN(synchronous建立联机) &#xff0c;ACK(acknowledgement 确认) &#xff0c;PSH(push传送)&#xff0c;FIN(finish结束) &#xff0c;RST(reset重置)&#xff0c; URG(urgent紧急) Sequence number(顺序号码) &#xff0c;Acknowledge num…...

flatten-maven-plugin使用

这篇文章主要介绍了flatten-maven-plugin使用&#xff0c;本文通过示例代码给大家介绍的非常详细&#xff0c;对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 − 目录 一、简介 1.1 作用1.2 goal介绍二、使用总结 一、简介 1.1 作用 将pom工程父子pom的版…...

Vue3中快速简单使用CKEditor 5富文本编辑器

Vue3简单使用CKEditor 5 前言准备定制基础配置富文本配置目录当前文章demo目录结构 快速使用demo 前言 CKEditor 5就是内嵌在网页中的一个富文本编辑器工具 CKEditor 5开发文档&#xff08;英文&#xff09;&#xff1a;https://ckeditor.com/docs/ckeditor5/latest/index.htm…...

qt简易网络聊天室 数据库的练习

qt网络聊天室 服务器&#xff1a; 配置文件.pro QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exac…...

Navicat连接mysql8.0:提示无法加载身份验证插件“caching_sha2_password”

Navicat连接mysql时&#xff0c;提示&#xff1a;Unable to load authentication plugin ‘caching_sha2_password‘. 原因&#xff1a;mysql 8.0 默认使用 caching_sha2_password 身份验证机制。 D:\MySQL8.0\install\bin>mysql -uroot -p123456789 #登录 mysql: [War…...

手写签名到背景上合为1张图

手写签名到背景上合为1张图 package.json中 "signature_pad": "3.0.0-beta.3"<template><div class"home"><canvas id"canvas" width"500" height"300"></canvas><button click"…...

华为认证系统学习大纲及课程

前言 任何学习过程都需要一个科学合理的学习路线&#xff0c;才能够有条不紊的完成我们的学习目标。华为认证网络工程师所需学习的内容纷繁复杂&#xff0c;难度较大&#xff0c;所以今天特别为大家整理了一个全面的华为认证网络工程师学习大纲及课程&#xff0c;帮大家理清思…...

某米ax3000路由器组网解析

我们使用某米k60手机与某米ax3000 wifi6路由器组网&#xff0c;来分析和学习网络速率与瓶颈限制。 某米 AX3000 路由器简介 某米 AX3000 路由器是一款支持 WiFi 6 的双频路由器&#xff0c;它的 MIMO 是 22&#xff0c;也就是两根天线。MIMO 是 Multiple Input Multiple Outpu…...

实战:用MAF的“人机协同”功能,给你的AI工具调用加上一道安全锁(附C#代码)

企业级AI代理安全实践&#xff1a;基于MAF的人机协同审批架构设计 当财务系统自动驳回了一笔高管差旅报销&#xff0c;或是订单管理系统未经确认修改了客户历史数据时&#xff0c;企业往往需要付出高昂的信任成本来修复这类"自动化事故"。Microsoft Agent Framework&…...

如何用tiny11builder打造轻量Windows 11系统:绕过硬件限制的完整指南

如何用tiny11builder打造轻量Windows 11系统&#xff1a;绕过硬件限制的完整指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 老旧电脑无法流畅运行Windows 11…...

Django CORS Headers 终极指南:10个企业级跨域架构设计技巧

Django CORS Headers 终极指南&#xff1a;10个企业级跨域架构设计技巧 【免费下载链接】django-cors-headers Django app for handling the server headers required for Cross-Origin Resource Sharing (CORS) 项目地址: https://gitcode.com/gh_mirrors/dj/django-cors-he…...

人脸识别系统如何利用图像质量评估提升准确率?5个实战场景解析

人脸识别系统如何利用图像质量评估提升准确率&#xff1f;5个实战场景解析 在光线昏暗的便利店监控画面中&#xff0c;一位戴着口罩的顾客突然抬头看向摄像头——这个瞬间能否被准确识别&#xff0c;往往取决于系统对人脸图像质量的实时判断能力。图像质量评估&#xff08;FQA&…...

从‘localhost:8080’到‘dev.myapp.com’:给本地服务绑个‘正经’域名的三种方法(Nginx/Docker/系统Hosts)

从‘localhost:8080’到‘dev.myapp.com’&#xff1a;本地服务域名绑定的实战指南 每次调试前端页面时&#xff0c;在浏览器地址栏反复输入localhost:3000或127.0.0.1:8080&#xff0c;这种体验总让人感觉像是在用临时解决方案应付正式开发需求。想象一下&#xff0c;当你的团…...

ParrelSync自定义参数功能:打造专属多人游戏测试环境的终极指南

ParrelSync自定义参数功能&#xff1a;打造专属多人游戏测试环境的终极指南 【免费下载链接】ParrelSync (Unity3D) Test multiplayer without building 项目地址: https://gitcode.com/gh_mirrors/pa/ParrelSync ParrelSync是一款专为Unity3D开发者设计的高效多人游戏测…...

当I2C总线卡死时我们在debug什么:从复位异常到多设备冲突的故障树分析

当I2C总线卡死时我们在debug什么&#xff1a;从复位异常到多设备冲突的故障树分析 I2C总线作为嵌入式系统中广泛使用的通信协议&#xff0c;其简洁的两线制设计&#xff08;SCL时钟线与SDA数据线&#xff09;背后隐藏着复杂的硬件交互逻辑。当系统突然出现I2C通信失败、设备无响…...

3个变革性步骤:用163MusicLyrics彻底解决歌词获取难题

3个变革性步骤&#xff1a;用163MusicLyrics彻底解决歌词获取难题 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字化音乐时代&#xff0c;歌词已不再是简单的文字附…...

无人机海上搜救数据集 海上搜救人员识别 违规游泳识别 无人艇自主导航数据集 海洋安全监控及水上救援预警等场景 深度学习yolo格式地10625期

海洋目标检测数据集 README 项目概述 本数据集聚焦于海洋场景下的目标识别与安全监测任务&#xff0c;为海上搜救、智能无人艇导航及海洋环境监控等领域提供高质量标注数据&#xff0c;助力海洋视觉感知技术的落地应用。核心数据信息维度内容数据类别共5类&#xff1a;船只、浮…...

PyArmor解包终极指南:3种高效逆向分析技巧快速掌握代码解密核心技术

PyArmor解包终极指南&#xff1a;3种高效逆向分析技巧快速掌握代码解密核心技术 【免费下载链接】PyArmor-Unpacker A deobfuscator for PyArmor. 项目地址: https://gitcode.com/gh_mirrors/py/PyArmor-Unpacker PyArmor-Unpacker是一个专为Python开发者和安全研究人员…...