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

代码优化之简化if臃肿的判断条件

简化if判断条件

方法1:

#include <iostream>
#include <vector>
#include <functional>// 封装参数的结构体
struct ConditionParams {int facenum;double zoomRatio;int iso;double facelv;int face_w;double qualityScore;int xx;int yy;
};// 条件检查函数,使用 std::function
bool checkConditions(const ConditionParams& params) {std::vector<std::pair<std::function<bool(const ConditionParams&)>, std::string>> conditions = {{[](const ConditionParams& p) { return p.facenum < p.xx; }, "Face number condition failed."},{[](const ConditionParams& p) { return p.zoomRatio > p.xx; }, "Zoom ratio condition failed."},{[](const ConditionParams& p) { return p.iso < p.xx && p.iso > p.yy; }, "ISO condition failed."},{[](const ConditionParams& p) { return p.facelv > p.xx; }, "Face level condition failed."},{[](const ConditionParams& p) { return p.face_w > p.xx; }, "Face width condition failed."},{[](const ConditionParams& p) { return p.qualityScore > p.xx; }, "Quality score condition failed."}};// 逐个检查条件for (const auto& [checker, errorMessage] : conditions) {if (!checker(params)) {std::cerr << errorMessage << std::endl;return false;}}return true;
}int main() {// 输入的参数ConditionParams params = {5, 2.0, 400, 1.5, 60, 0.95, 10, 100};// 检查条件if (checkConditions(params)) {std::cout << "All conditions met." << std::endl;} else {std::cout << "Some conditions failed." << std::endl;}return 0;
}
  • std::function:使用 std::function<bool(const ConditionParams&)> 取代了函数指针,使得 lambda 表达式更加灵活。
  • ConditionParams 结构体:将所有条件判断的输入参数封装在 ConditionParams 结构体中,使得代码简洁且易于扩展。
  • 简洁的条件检查流程:通过 for 循环遍历所有条件并逐个检查,每个条件不满足时打印对应的错误信息,便于调试。

方法2:

  • 将每个条件提取到独立的函数中:这样每个条件的逻辑更加清晰。
  • 提供清晰的日志或调试信息:当某个条件未通过时,可以打印出相关的错误或状态信息。
  • 使用可读性更好的结构:比如,链式调用或结构体方式,使条件检查更具语义化。
#include <iostream>bool checkFaceNum(int facenum, int threshold) {if (facenum < threshold) {std::cout << "Check failed: facenum < " << threshold << std::endl;return false;}return true;
}bool checkZoomRatio(float zoomRatio, float threshold) {if (zoomRatio <= threshold) {std::cout << "Check failed: zoomRatio <= " << threshold << std::endl;return false;}return true;
}bool checkIsoRange(int iso, int minThreshold, int maxThreshold) {if (iso < minThreshold || iso > maxThreshold) {std::cout << "Check failed: iso out of range [" << minThreshold << ", " << maxThreshold << "]" << std::endl;return false;}return true;
}bool checkFaceLevel(float facelv, float threshold) {if (facelv <= threshold) {std::cout << "Check failed: facelv <= " << threshold << std::endl;return false;}return true;
}bool checkFaceWidth(float face_w, float threshold) {if (face_w <= threshold) {std::cout << "Check failed: face_w <= " << threshold << std::endl;return false;}return true;
}bool checkQualityScore(float qualityScore, float threshold) {if (qualityScore <= threshold) {std::cout << "Check failed: qualityScore <= " << threshold << std::endl;return false;}return true;
}bool allConditionsMet(int facenum, float zoomRatio, int iso, float facelv, float face_w, float qualityScore) {return checkFaceNum(facenum, 10) &&    // 假设阈值为 10checkZoomRatio(zoomRatio, 1.5) &&   // 假设阈值为 1.5checkIsoRange(iso, 100, 800) &&    // 假设iso范围为100-800checkFaceLevel(facelv, 0.8) &&    // 假设facelv阈值为 0.8checkFaceWidth(face_w, 50) &&     // 假设face_w阈值为 50checkQualityScore(qualityScore, 0.9);  // 假设质量分数阈值为 0.9
}int main() {int facenum = 9;float zoomRatio = 2.0;int iso = 400;float facelv = 1.0;float face_w = 55.0;float qualityScore = 0.95;if (allConditionsMet(facenum, zoomRatio, iso, facelv, face_w, qualityScore)) {std::cout << "All conditions met, proceeding..." << std::endl;} else {std::cout << "Conditions not met, please check the logs for details." << std::endl;}return 0;
}

方法3:

如果条件很多,可以使用结构体封装输入参数,并通过链式方法实现条件检查。

#include <iostream>struct ConditionChecker {int facenum;float zoomRatio;int iso;float facelv;float face_w;float qualityScore;bool checkFaceNum(int threshold) {if (facenum < threshold) {std::cout << "Check failed: facenum < " << threshold << std::endl;return false;}return true;}bool checkZoomRatio(float threshold) {if (zoomRatio <= threshold) {std::cout << "Check failed: zoomRatio <= " << threshold << std::endl;return false;}return true;}bool checkIsoRange(int minThreshold, int maxThreshold) {if (iso < minThreshold || iso > maxThreshold) {std::cout << "Check failed: iso out of range [" << minThreshold << ", " << maxThreshold << "]" << std::endl;return false;}return true;}bool checkFaceLevel(float threshold) {if (facelv <= threshold) {std::cout << "Check failed: facelv <= " << threshold << std::endl;return false;}return true;}bool checkFaceWidth(float threshold) {if (face_w <= threshold) {std::cout << "Check failed: face_w <= " << threshold << std::endl;return false;}return true;}bool checkQualityScore(float threshold) {if (qualityScore <= threshold) {std::cout << "Check failed: qualityScore <= " << threshold << std::endl;return false;}return true;}// 链式条件检查bool allConditionsMet() {return checkFaceNum(10) &&checkZoomRatio(1.5) &&checkIsoRange(100, 800) &&checkFaceLevel(0.8) &&checkFaceWidth(50) &&checkQualityScore(0.9);}
};int main() {ConditionChecker checker = {9, 2.0, 400, 1.0, 55.0, 0.95};if (checker.allConditionsMet()) {std::cout << "All conditions met, proceeding..." << std::endl;} else {std::cout << "Conditions not met, please check the logs for details." << std::endl;}return 0;
}

相关文章:

代码优化之简化if臃肿的判断条件

简化if判断条件 方法1&#xff1a; #include <iostream> #include <vector> #include <functional>// 封装参数的结构体 struct ConditionParams {int facenum;double zoomRatio;int iso;double facelv;int face_w;double qualityScore;int xx;int yy; };//…...

【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南

前言 在人工智能的浪潮中&#xff0c;语音识别技术正逐渐成为我们日常生活中不可或缺的一部分。随着 OpenAI 的 Whisper 模型的推出&#xff0c;语音转文本的过程变得前所未有的简单和高效。无论是从 YouTube 视频中提取信息&#xff0c;还是将播客内容转化为文本&#xff0c;…...

Docker 下备份恢复oracle

1.docker导出容器镜像 ##docker save -o 导出后的镜像名称.tar 容器名称|镜像id docker save -o oracle_11g.tar 3fa112fd3642 2.下载镜像上传镜像略 3.加载镜像 ##docker load -i <archive_file> docker load -i oracle11g11201.tar 4.添加版本号…...

oneplus3t-android_framework

0.确认oneplus6 root正常 oneplus6 root材料 oneplus6手机恢复出厂设置 &#xff0c; 或者 线刷 enchilada_22_K.52_210716_repack--HOS-10.0.11.zip &#xff1a; https://gitee.com/OnePlus6-brick-enchilada_22_K_52_210716_repack-HOS-10_0_11-zip OnePlus6Hydrogen_22…...

偷懒总结篇|贪心算法|动态规划|单调栈|图论

由于这周来不及了&#xff0c;先过一遍后面的思路&#xff0c;具体实现等下周再开始详细写。 贪心算法 这个图非常好 122.买卖股票的最佳时机 II(妙&#xff0c;拆分利润) 把利润分解为每天为单位的维度&#xff0c;需要收集每天的正利润就可以&#xff0c;收集正利润的区间…...

C语言初阶七:C语言操作符详解(1)

#1024程序员节|征文# 这篇文章是对之前文章中操作符的补充&#xff0c;可以看之前的文章&#xff1a;C语言初阶&#xff1a;六.算数操作_如何用编程表示除法-CSDN博客 C语言操作符是用于执行各种运算和操作的符号。包括算术操作符&#xff08;如、-、*、/、%&#xff09;&#…...

GO excelize 读取excel进行时间类型转换(自动转换)

GO excelize 读取excel进行时间类型转换&#xff08;自动转换&#xff09; 需求分析 需求&#xff1a;如何自动识别excel中的时间类型数据并转化成对应的 "Y-m-d H:i:s"类型数据。 分析&#xff1a;excelize在读取excel时&#xff0c;GetRows() 返回的都是字符串类…...

【算法与数据结构】二分查找思想

#1024程序员节&#xff5c;征文# 正文&#xff1a; 二分查找&#xff08;binary search&#xff09;是一种基于分治策略的高效搜索算法。它利用数据的有序性&#xff0c;每轮缩小一半搜索范围&#xff0c;直至找到目标元素或搜索区间为空为止&#xff0c;其实有时候数据没有序…...

PHP PDO:安全、灵活的数据持久层解决方案

PHP PDO&#xff1a;安全、灵活的数据持久层解决方案 PHP PDO&#xff08;PHP Data Objects&#xff09;是一个轻量级的、具有兼容接口的数据持久层抽象层。它提供了一个统一的API来访问多种数据库系统&#xff0c;如MySQL、PostgreSQL、SQLite、Oracle等。PDO扩展在PHP 5.1.0…...

九、Linux实战案例:项目部署全流程深度解析

Linux实战案例&#xff1a;项目部署全流程深度解析 在当今信息技术领域&#xff0c;Linux服务器凭借其卓越的稳定性、安全性以及强大的性能表现&#xff0c;被广泛应用于各类项目部署场景之中。本文将全面深入地介绍如何将一个项目成功部署至Linux服务器的完整流程&#xff0c…...

GIS常见前端开发框架

#1024程序员节&#xff5c;征文# 伴随GIS的发展&#xff0c;陆续出现了众多开源地图框架&#xff0c;这些地图框架与众多行业应用融合&#xff0c;极大地拓展了GIS的生命力&#xff0c;这里介绍几个常见的GIS前端开发框架&#xff0c;排名不分先后。 1.Leaflet https://leafl…...

Java | Leetcode Java题解之第506题相对名次

题目&#xff1a; 题解&#xff1a; class Solution {public String[] findRelativeRanks(int[] score) {int n score.length;String[] desc {"Gold Medal", "Silver Medal", "Bronze Medal"};int[][] arr new int[n][2];for (int i 0; i &…...

数据结构 - 堆

今天我们将学习新的数据结构-堆。 01定义 堆是一种特殊的二叉树&#xff0c;并且满足以下两个特性&#xff1a; &#xff08;1&#xff09;堆是一棵完全二叉树&#xff1b; &#xff08;2&#xff09;堆中任意一个节点元素值都小于等于&#xff08;或大于等于&#xff09;左…...

html----图片按钮,商品展示

源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图标</title><style>.box{width:…...

YOLOv11改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点

一、本文介绍 本文记录的是利用小波卷积WTConv模块优化YOLOv11的目标检测网络模型。WTConv的目的是在不出现过参数化的情况下有效地增加卷积的感受野,从而解决了CNN在感受野扩展中的参数膨胀问题。本文将其加入到深度可分离卷积中,有效降低模型参数量和计算量,并二次创新C3…...

redis高级篇之redis源码分析List类型quicklist底层演变 答疑159节

(1)ziplist压缩配置:list-compress-depth 0 表示一个quicklist两端不被压缩的节点个数。这里的节点是指quicklist双向链表的节点&#xff0c;而不是指ziplist里面的数据项个数参数list-compress-depth的取值含义如下: 0:是个特殊值&#xff0c;表示都不压缩。这是Redis的默认值…...

Elasticsearch 与 Lucene 的区别和联系

Elasticsearch 与 Lucene 的区别和联系 Elasticsearch 与 Lucene 的区别和联系一、知识背景Elasticsearch 简介Lucene 简介 二、Elasticsearch 和 Lucene 的区别适用场景性能优势和劣势架构设计的异同点 三、Elasticsearch和Lucene的联系四、Elasticsearch和Lucene的应用案例及…...

OpenCV视觉分析之运动分析(5)背景减除类BackgroundSubtractorMOG2的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 基于高斯混合模型的背景/前景分割算法。 该类实现了在文献[320]和[319]中描述的高斯混合模型背景减除。 cv::BackgroundSubtractorMOG2 类是 O…...

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据

【SAP Hana】X-DOC&#xff1a;数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS&#xff0c;从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…...

WPF的UpdateSourceTrigger属性

在WPF中&#xff0c;UpdateSourceTrigger属性用于控制数据绑定中何时将绑定目标&#xff08;通常是UI元素&#xff09;的值更新回绑定源&#xff08;通常是数据对象&#xff09;。这个属性有以下几个值&#xff1a; Default&#xff1a;这是默认值&#xff0c;对于不同的绑定目…...

2024-09-25 环境变量,进程地址空间

一、认识常见的环境变量 1. echo $HOME 输出当前用户对应的家目录 当用户登录系统时&#xff0c;流程如下&#xff1a; &#xff08;1&#xff09;用户登录系统后&#xff0c;系统启动Shell程序。 &#xff08;2&#xff09;启动bash shell&#xff0c;准备接收用户指令。 &a…...

中国移动机器人将投入养老场景;华为与APUS共筑AI医疗多场景应用

AgeTech News 一周行业大事件 华为与APUS合作&#xff0c;共筑AI医疗多场景应用 中国移动展出人形机器人&#xff0c;预计投入养老等场景 作为科技与奥富能签约&#xff0c;共拓智能适老化改造领域 天与养老与香港科技园&#xff0c;共探智慧养老新模式 中山大学合作中国…...

青少年编程能力等级测评CPA C++ 四级试卷(1)

青少年编程能力等级测评CPA C 四级试卷&#xff08;1&#xff09; 一、单项选择题&#xff08;共15题&#xff0c;每题3分&#xff0c;共45分&#xff09; CP4_1_1.在面向对象程序设计中&#xff0c;与数据构成一个相互依存的整体的是&#xff08; &#xff09;。 A. 对数据…...

树上任意两点的距离

题目描述 给出 n 个点的一棵树&#xff0c;多次询问两点之间的最短距离。 注意&#xff1a;边是双向的。 输入描述 第一行为两个整数 n 和 m。n 表示点数&#xff0c;m 表示询问次数&#xff1b; 下来 n−1 行&#xff0c;每行三个整数 x,y,k&#xff0c;表示点 x 和点 y 之间…...

【 thinkphp8 】00008 thinkphp8数据查询,常用table,name方法,进行数据查询汇总

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【 t…...

Git的命令合集

关于Git的一些命令合集&#xff0c;会慢慢更新&#xff01; 20241024程序员节开始写的&#xff0c;记录一下~~ git查看log、查看详细提交记录 会显示之前的提交记录 , 排序由近及远 git log log按q退出 git回退到某个commit命令&#xff1a; 退到/进到指定commit的sha码&…...

博客搭建之路:hexo搜索引擎收录

文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到&#xff0c;想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…...

创建Windows系统还原点

系统保护...

Linux等保测评需要用到的命令

三权设置 查看账户情况 cd /home/ ll 设置审计账户 useradd shenji passwd shenji 修改密码 passwd新密码 设置管理账户 useradd guanli passwd guanli compgen -u 查看用户 切换到root账户 su root 设置审计用户权限 vim /etc/sudoers shenji ALL (root) NOPASSWD:…...

PostgreSQL的学习心得和知识总结(一百五十六)|auto_explain — log execution plans of slow queries

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…...

做灯带的网站/教育机构培训

在6月上旬举行的云栖大会上海峰会上&#xff0c;阿里云发布了vSphere虚拟机备份上云服务&#xff08;HBR for vSphere&#xff09;&#xff0c;并已经在7月份开始邀测。利用混合云备份服务可以将虚拟机镜像备份上云&#xff0c;避免了传统备份方案复杂的软件部署&#xff0c;存…...

合肥城市建设网站/百度影响力排名顺序

在C语言中对于float&#xff0c;用4字节存储&#xff0c;比如1.618000 &#xff0c;在内存中为 160 26 207 631.000000&#xff0c; 在内存中为 0 0 128 63那么我有4个字节数据&#xff0c;比如{160 26 207 63}&#xff0c;怎么转成float呢&#xff1f;其…...

做网站的专业/谷歌推广培训

设备 naa.6006016004102900751132ac8de3e211 性能降低。I/O 滞后时间 已从平均值 516 微秒增加到 10332 微秒。 导致这个原因和解决办法了&#xff1a;这原因是主要是有VM性能监控导致的&#xff0c;具体原因VMware工程师也说不清楚&#xff0c;解决办法是更改VM属性参数。如下…...

合肥晚报社官方网站/每日新闻最新消息

作为vue的初用者&#xff0c;你可能会像我一样遇到一个问题&#xff0c;对跳转组件是&#xff0c;我们想通过参数不同&#xff0c;调用不同的方法。 例如&#xff1a; app.vue <ul><li class"navList" v-for"index in goods" :key"index.…...

简单写文章的网站/百度一下就会知道了

冒泡排序 **思路&#xff1a;**每趟两两比较&#xff0c;确定最后一个数为最大值&#xff0c;依次&#xff0c;确定倒数第二个为第二大值……&#xff0c;直到所有数轮完&#xff0c;则发现从后到前已经有序&#xff08;大–小&#xff09;&#xff0c; 从前往后看&#xff0c…...

内蒙古 网站建设/搜索引擎哪个最好用

Select CHeckSum_AGG(CheckSum(*)) From 表名/*CheckSum用于生成哈希索引,CHeckSum_AGG返回组中各值的校验和,如果两个表的值相等,则认为内容是相同的如果有任一列是非可比数据类型,则CheckSum返回错误非可比数据类型有text,ntext,image,XML和cursor,还包括以上述任一类型作为基…...