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

C++中的策略模式实战

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value)查找第一个等于value的元素返回迭代器未找到返回end。find_if(begin, end, predicate)查找第一个满足谓词的元素。find_end(begin, end, sub_begin, sub_end)查找子序列最后一次出现的位置。vectorint nums {1, 3, 5, 7, 9}; // 查找值为5的元素 auto it find(nums.begin(), nums.end(), 5); if (it ! nums.end()) { cout found: *it endl; // 输出5 } // 查找第一个大于6的元素 auto it2 find_if(nums.begin(), nums.end(), [](int x) { return x 6; }); cout first 6: *it2 endl; // 输出7 // 查找子序列 vectorint sub {3, 5}; auto it3 find_end(nums.begin(), nums.end(), sub.begin(), sub.end()); if (it3 ! nums.end()) { cout subsequence starts at index: it3 - nums.begin() endl; // 输出1 }1.2 count 和 count_ifcount(begin, end, value)统计等于value的元素个数。count_if(begin, end, predicate)统计满足谓词predicate的元素个数。std::vectorint vec {1, 2, 3, 2, 4, 2}; int cnt std::count(vec.begin(), vec.end(), 2); // 计数2的个数结果为3 int even_cnt std::count_if(vec.begin(), vec.end(), [](int x) { return x % 2 0; }); // 偶数个数结果为41.3 for_each对范围内的每个元素应用一个函数std::vectorint vec {1, 2, 3, 4, 5}; std::for_each(vec.begin(), vec.end(), [](int x) { x * 2; // 将每个元素乘以2 }); // 现在vec变为{2, 4, 6, 8, 10}1.4 equal 与 mismatchequal(b1, e1, b2)判断两个范围[b1,e1)和[b2, b2(e1-b1))是否相等。mismatch(b1, e1, b2)返回两个范围中第一个不相等元素的迭代器对pair。vectorint a {1, 2, 3}; vectorint b {1, 2, 4}; vectorint c {1, 2, 3, 4}; // 比较a和b的前3个元素 bool is_equal equal(a.begin(), a.end(), b.begin()); cout a b? boolalpha is_equal endl; // 输出false // 查找a和c的第一个不匹配元素 auto mis mismatch(a.begin(), a.end(), c.begin()); if (mis.first ! a.end()) { cout mismatch: *mis.first vs *mis.second endl; // 无输出a和c前3元素相等 }1.5 all_of, any_of, none_of检查范围内元素是否全部、存在或没有满足条件的std::vectorint vec {2, 4, 6, 8}; bool all_even std::all_of(vec.begin(), vec.end(), [](int x) { return x % 2 0; }); // true bool any_odd std::any_of(vec.begin(), vec.end(), [](int x) { return x % 2 ! 0; }); // false bool none_negative std::none_of(vec.begin(), vec.end(), [](int x) { return x 0; }); // true2、修改序列算法这些算法会修改它们所操作的容器中的元素。2.1 copy 和 copy_ifcopy(begin, end, dest)将[begin, end)中的元素复制到dest开始的位置。copy_if(begin, end, dest, predicate)复制满足谓词的元素到dest。vectorint src {1, 2, 3, 4, 5}; vectorint dest(5); // 需预先分配足够空间 // 复制所有元素 copy(src.begin(), src.end(), dest.begin()); // dest: [1,2,3,4,5] // 复制偶数元素到新容器 vectorint evens; copy_if(src.begin(), src.end(), back_inserter(evens), [](int x) { return x % 2 0; }); // evens: [2,4]注意back_inserter(dest)会自动调用push_back无需提前分配空间。2.2 transform对范围内的每个元素应用一个函数并将结果存储在另一个范围内vectorint nums {1, 2, 3}; vectorint squares(3); // 计算平方单参数转换 transform(nums.begin(), nums.end(), squares.begin(), [](int x) { return x * x; }); // squares: [1,4,9] // 两容器元素相加双参数转换 vectorint a {1, 2, 3}; vectorint b {4, 5, 6}; vectorint sum(3); transform(a.begin(), a.end(), b.begin(), sum.begin(), [](int x, int y) { return x y; }); // sum: [5,7,9]2.3 replace、replace_if与 replace_copyreplace(begin, end, old_val, new_val)将所有old_val替换为new_val。replace_if(begin, end, predicate, new_val)替换满足谓词的元素。replace_copy(begin, end, dest, old_val, new_val)复制时替换元素不修改原容器。vectorint nums {1, 2, 3, 2, 5}; // 替换所有2为20 replace(nums.begin(), nums.end(), 2, 20); // nums: [1,20,3,20,5] // 替换大于10的元素为0 replace_if(nums.begin(), nums.end(), [](int x) { return x 10; }, 0); // nums: [1,0,3,0,5] // 复制时替换3为300原容器不变 vectorint res; replace_copy(nums.begin(), nums.end(), back_inserter(res), 3, 300); // res: [1,0,300,0,5]2.4 remove、remove_if 与 eraseremove(begin, end, value)将等于value的元素 “移动” 到容器末尾返回新的逻辑尾迭代器不实际删除元素需配合erase。remove_if(begin, end, predicate)移动满足谓词的元素到末尾。vectorint nums {1, 2, 3, 2, 4}; // 逻辑删除所有2移动到末尾 auto new_end remove(nums.begin(), nums.end(), 2); // nums: [1,3,4,2,2] // 物理删除真正移除元素 nums.erase(new_end, nums.end()); // nums: [1,3,4] // 结合lambda删除偶数 nums {1, 2, 3, 4, 5}; nums.erase(remove_if(nums.begin(), nums.end(), [](int x) { return x % 2 0; }), nums.end()); // nums: [1,3,5]2.5 unique移除范围内连续的重复元素返回新的逻辑结尾迭代器。通常与erase结合使用。std::vectorint vec {1, 1, 2, 2, 3, 3, 3, 4, 5}; auto last std::unique(vec.begin(), vec.end()); vec.erase(last, vec.end()); // vec变为{1, 2, 3, 4, 5}2.6 reverse反转范围内的元素顺序std::vectorint vec {1, 2, 3, 4, 5}; std::reverse(vec.begin(), vec.end()); // vec变为{5, 4, 3, 2, 1}2.7 rotate旋转范围内的元素使中间元素成为新的第一个元素std::vectorint vec {1, 2, 3, 4, 5}; std::rotate(vec.begin(), vec.begin() 2, vec.end()); // 以3为起点旋转vec变为{3, 4, 5, 1, 2}2.8 shuffle随机重排范围内的元素需要C11或更高版本#include random #include algorithm std::vectorint vec {1, 2, 3, 4, 5}; std::random_device rd; std::mt19937 g(rd()); std::shuffle(vec.begin(), vec.end(), g); // 随机打乱vec中的元素3、排序和相关算法3.1 sort、stable_sort 与 partial_sortsort(begin, end)对元素进行快速排序不稳定平均时间复杂度 O (n log n)。stable_sort(begin, end)稳定排序相等元素相对位置不变。partial_sort(begin, mid, end)部分排序使[begin, mid)为整个范围中最小的元素并排序。std::vectorint vec {5, 3, 1, 4, 2}; std::sort(vec.begin(), vec.end()); // 默认升序vec变为{1, 2, 3, 4, 5} std::sort(vec.begin(), vec.end(), std::greaterint()); // 降序vec变为{5, 4, 3, 2, 1} std::sort(vec.begin(), vec.end(), [](int a, int b) { return a b; }); // 升序自定义比较 std::vectorstd::pairint, int vec {{1, 2}, {2, 1}, {1, 1}, {2, 2}}; std::stable_sort(vec.begin(), vec.end(), [](const auto a, const auto b) { return a.first b.first; // 按first排序保持相等元素的相对顺序 }); std::vectorint vec {5, 3, 1, 4, 2, 6}; // 将最小的3个元素放在前面并排序 std::partial_sort(vec.begin(), vec.begin() 3, vec.end()); // 现在vec前三个元素是1, 2, 3后面是未排序的4, 5, 63.2 nth_element重新排列范围使得指定位置的元素等于排序后的元素并且左边的元素都不大于它右边的元素都不小于它std::vectorint vec {5, 3, 1, 4, 2, 6}; // 找到第三小的元素索引2 std::nth_element(vec.begin(), vec.begin() 2, vec.end()); // 现在vec[2]是3它左边的元素3右边的33.3 binary_search、lower_bound、upper_bound需在已排序的容器上使用binary_search(begin, end, value)判断value是否存在返回bool。lower_bound(begin, end, value)返回第一个不小于value的元素迭代器。upper_bound(begin, end, value)返回第一个大于value的元素迭代器。vectorint sorted {1, 3, 3, 5, 7}; // 必须先排序 // 判断3是否存在 bool exists binary_search(sorted.begin(), sorted.end(), 3); // true // 查找第一个3的元素 auto lb lower_bound(sorted.begin(), sorted.end(), 3); cout lower_bound index: lb - sorted.begin() endl; // 输出1 // 查找第一个3的元素 auto ub upper_bound(sorted.begin(), sorted.end(), 3); cout upper_bound index: ub - sorted.begin() endl; // 输出33.4 merge合并两个已排序的范围到新容器保持排序vectorint a {1, 3, 5}; vectorint b {2, 4, 6}; vectorint merged(a.size() b.size()); // 合并a和b均需已排序 merge(a.begin(), a.end(), b.begin(), b.end(), merged.begin()); // merged: [1,2,3,4,5,6]4、堆算法STL提供了将范围作为堆来操作的算法包括make_heap,push_heap,pop_heap,sort_heap等。std::vectorint vec {4, 1, 3, 2, 5}; std::make_heap(vec.begin(), vec.end()); // 构建最大堆vec变为{5, 4, 3, 2, 1} vec.push_back(6); std::push_heap(vec.begin(), vec.end()); // 将新元素加入堆vec变为{6, 4, 5, 2, 1, 3} std::pop_heap(vec.begin(), vec.end()); // 将最大元素移到末尾vec变为{5, 4, 3, 2, 1, 6} int max_val vec.back(); // 获取最大元素6 vec.pop_back(); // 移除最大元素 std::sort_heap(vec.begin(), vec.end()); // 将堆排序为升序序列vec变为{1, 2, 3, 4, 5}5、最小/最大值算法5.1 min 和 max返回两个值或初始化列表中的最小/最大值int a 5, b 3; int min_val std::min(a, b); // 3 int max_val std::max(a, b); // 5 auto min_of_list std::min({4, 2, 8, 5, 1}); // 1 auto max_of_list std::max({4, 2, 8, 5, 1}); // 85.2 min_element 和 max_element返回范围内的最小/最大元素的迭代器std::vectorint vec {3, 1, 4, 2, 5}; auto min_it std::min_element(vec.begin(), vec.end()); // 指向1 auto max_it std::max_element(vec.begin(), vec.end()); // 指向55.3 minmax_element (C11)同时返回范围内的最小和最大元素的迭代器std::vectorint vec {3, 1, 4, 2, 5}; auto minmax std::minmax_element(vec.begin(), vec.end()); // minmax.first指向1minmax.second指向56、数值算法在numeric中6.1 accumulate计算范围内元素的累加和或自定义操作#include numeric std::vectorint vec {1, 2, 3, 4, 5}; int sum std::accumulate(vec.begin(), vec.end(), 0); // 和初始值为0结果为15 int product std::accumulate(vec.begin(), vec.end(), 1, std::multipliesint()); // 乘积初始值为1结果为1206.2 inner_product计算两个范围的内积或自定义操作std::vectorint a {1, 2, 3}; std::vectorint b {4, 5, 6}; int dot std::inner_product(a.begin(), a.end(), b.begin(), 0); // 1*4 2*5 3*6 326.3 iota用连续递增的值填充范围std::vectorint vec(5); std::iota(vec.begin(), vec.end(), 10); // 填充为10, 11, 12, 13, 146.4 partial_sum计算部分和将结果存储在目标范围内std::vectorint src {1, 2, 3, 4, 5}; std::vectorint dst(src.size()); std::partial_sum(src.begin(), src.end(), dst.begin()); // dst变为{1, 3, 6, 10, 15}6.5 adjacent_difference计算相邻元素的差值将结果存储在目标范围内std::vectorint src {1, 2, 3, 4, 5}; std::vectorint dst(src.size()); std::adjacent_difference(src.begin(), src.end(), dst.begin()); // dst变为{1, 1, 1, 1, 1}7、其他7.1 generate用生成函数填充范围std::vectorint vec(5); int n 0; std::generate(vec.begin(), vec.end(), [n]() { return n; }); // 填充为0, 1, 2, 3, 47.2 generate_n用生成函数填充范围的开始n个元素std::vectorint vec(5); int n 10; std::generate_n(vec.begin(), 3, [n]() { return n; }); // 前三个元素为10, 11, 12后两个保持不变7.3 includes检查一个排序范围是否包含另一个排序范围的所有元素std::vectorint vec1 {1, 2, 3, 4, 5}; std::vectorint vec2 {2, 4}; bool includes std::includes(vec1.begin(), vec1.end(), vec2.begin(), vec2.end()); // true7.3 set_union, set_intersection, set_difference, set_symmetric_difference执行集合操作并集、交集、差集和对称差集std::vectorint v1 {1, 2, 3, 4, 5}; std::vectorint v2 {3, 4, 5, 6, 7}; std::vectorint result; // 并集 std::set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result)); // result为{1, 2, 3, 4, 5, 6, 7} // 交集 result.clear(); std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result)); // result为{3, 4, 5} // 差集 (v1 - v2) result.clear(); std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result)); // result为{1, 2} // 对称差集 (v1 ∪ v2 - v1 ∩ v2) result.clear(); std::set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result)); // result为{1, 2, 6, 7}8、常见问题sort与stable_sort的区别sort采用快速排序实际是 introsort 算法不稳定相等元素的相对位置可能改变平均时间复杂度 O (n log n)。stable_sort采用归并排序稳定相等元素相对位置不变时间复杂度 O (n log n)但空间开销略大。为什么remove算法需要配合erase使用remove算法的原理是 “覆盖” 要删除的元素将保留的元素移到前面返回新的逻辑尾迭代器但不修改容器的实际大小。erase则通过迭代器范围真正删除元素修改容器大小。因此需结合使用container.erase(remove(...), container.end())。哪些算法需要容器是已排序的二分查找系列binary_search、lower_bound、upper_bound、集合算法set_intersection、set_union等、merge等这些算法依赖有序性实现高效操作如二分查找 O (log n)。

相关文章:

C++中的策略模式实战

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

开源软件的使用贡献与社区参与经验分享

开源世界的大门:我的贡献与成长之旅 在数字化浪潮中,开源软件已成为技术发展的核心驱动力。从个人开发者到大型企业,无数人通过使用、改进和共享代码推动创新。作为一名长期参与开源项目的技术爱好者,我深刻体会到开源不仅是工具…...

MySQL 查询优化与索引覆盖机制

MySQL查询优化与索引覆盖机制是提升数据库性能的核心技术。随着数据量激增,高效的查询处理成为系统流畅运行的关键。索引覆盖机制通过避免回表操作,显著减少I/O消耗,而查询优化则能从根本上改善执行效率。本文将深入解析其原理与实践方法&…...

身份认证方案

身份认证方案:构建数字世界的安全基石 在数字化时代,身份认证是保障信息安全的第一道防线。无论是登录银行账户、访问企业内网,还是使用社交媒体,身份认证方案都在确认“你是谁”的过程中扮演关键角色。随着网络攻击手段的日益复…...

湖南特产酱板鸭项目有哪些

大家好,今天咱们聊聊湖南特产中的明星产品——酱板鸭。说到酱板鸭,大家可能会想到各种品牌,但今天我要重点介绍的是“渔小站君山酱板鱼”这个品牌。为什么呢?因为它不仅传承了传统的制作工艺,还在经营模式上做了很多创…...

Spring Boot 异步任务超时控制机制

Spring Boot异步任务超时控制机制解析 在现代高并发系统中,异步任务处理是提升性能的关键手段,但若任务执行时间过长,可能导致资源阻塞或系统雪崩。Spring Boot通过灵活的异步任务超时控制机制,帮助开发者平衡效率与稳定性。本文…...

消息队列选型指南2024

消息队列选型指南2024:如何为你的业务挑选最佳方案 在数字化浪潮中,消息队列作为分布式系统的核心组件,承担着解耦、异步通信和流量削峰的关键作用。随着技术的快速演进,2024年的消息队列生态涌现出更多高性能、高可用的解决方案…...

记一个BUG:Trae里MongoDB和MySQL MCP不能共存

事情是这样的 最近在Trae里配MCP(Model Context Protocol),想同时连MongoDB和MySQL,方便AI直接查数据库写代码。 我在Trae的应用市场里,分别找到了MongoDB MCP和MySQL MCP,按说明配好。单独测的时候&…...

AI 模型推理的批量执行优化方案

AI模型推理的批量执行优化方案 随着AI技术的快速发展,模型推理在工业界的应用越来越广泛,尤其是在图像识别、自然语言处理和推荐系统等领域。随着业务规模的扩大,单次推理请求的处理效率已无法满足高并发需求。批量执行(Batch In…...

Rust的匹配中的@绑定模式与类型推断在泛型上下文中的行为

Rust作为一门强调安全与性能的系统编程语言,其模式匹配机制一直是开发者津津乐道的特性之一。其中,绑定模式与类型推断在泛型上下文中的交互行为,展现了Rust语言设计的精妙之处。本文将从实际应用场景出发,深入探讨这一机制的核心…...

0硬件知识体系目录2021-10-12

硬件知识体系第1章 元器件基本知识1.1 电阻 RES Resistance1.2 电容 CAP Capacitance1.3 电感 IND Inductance1.4 磁珠 Bead1.5 二极管 Diode1.6 三极管 BJT Bipolar Junction Transistor1.7 场效应管 MOS Metal-Oxide-Semiconductor Field-Effect Transistor1.8 晶振 CRY Crys…...

TypeScript学习笔记 - P2

TypeScript学习笔记——类型1. 类型限制1. ts可以在变量声明时规定类型2. 如果变量的声明和赋值同时进行,ts会自动规定类型3. 对函数进行类型限制2. TS的类型1. 字面量类型2. any类型3. unknown类型4. void类型5. never类型6. object类型7. array类型8. tuple类型9.…...

TypeScript学习笔记 - P1

TypeScript学习笔记——简介1. TypeScript的简介2. TS增加了什么?1. 类型2. 支持ES6新特性3. 添加ES不具备的新特性4. 丰富的配置选项5. 强大的开发工具3.TS开发环境搭建1. 下载Node.js2. 安装Node.js3. 使用npm全局安装typescript4.第一个TS文件1. 创建ts文件1. 编…...

三、SpringCloud入门概述

三、SpringCloud入门概述 1. 什么是微服务 1. 为什么要使用微服务? 1. 微服务的优缺点是什么?说说你在项目开发中遇到的坑? 1. SpringCloud和SpringBoot的关系 SpringBoot专注于开苏方便的开发单个个体微服务;SpringCloud是关注全…...

【多线程基础】线程状态 同步 协作 线程池 Lambda表达式

一、基本概念进程 Process进程就是执行程序的一次执行过程,它是一个动态的概念,是系统资源分配的单位通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程是CPU调度和执行的单位…...

数据结构___线性表

2.1线性表的定义(逻辑结构):●定义: 具有相同数据类型的N(N>0)个数据元素的有限序列,其中N为表长,当N 0 时,线性表时一个空表.表示 L (a1,a2,...,ai, ai1, ..., an)●每个数据元素所占空间一样大.有限的序列. 注意 用数组实现线性表下标从0开始.●位序 :从1开始的,一个线…...

【Xilinx Vivado 时序分析/约束系列10】FPGA开发时序分析/约束-FPGA DDR-Direct接口的 input delay 约束优化方法

目录 DDR采样简述 第一种模型(不带PLL) 实际操作 总结约束 实际工程 顶层代码 时钟约束 input delay约束 查看时序报告 解决办法 添加原语 原语解释 查看时序报告 时序分析 总结 往期系列博客 DDR采样简述 在之前分析了SDR采样&#xff…...

SAP ML81N消息号SE729提示用户定制被错误的维护的解决方案

SAP PS模块日常解决方案 文章目录SAP PS模块日常解决方案前言在SAP使用过程中,服务类的采购订单在使用ML81N进行服务确认操作时,已经操作成功,但是系统会提示消息号SE729:提示用户定制被错误的维护。 注意:以下内容是基…...

构建画面记忆法

目录:一、十二地支记忆二、十天干记忆三、51位圆周率记忆文|随意的风:联锁拍照,产生一幅一幅的图片,将图片以故事摄影方式联系在一起。将右脑充分开发出来。一、十二地支记忆1、饺子,交子,夜半子时。半夜里…...

CorelDRAW_X6使用汇总

目录: 一、软件的下载、安装与注册 1、软件下载 2、软件注册 二、软件的使用 1、页面布局 2、坐标原点设置在图纸的中心 3、标注尺寸 4、颜色处理 5、合并对象为一个单元 6、导角 7、文字的添加与修改 8、图形绘制 9、对象的图层切换 10、图形去描边、…...

COMSOL多物理场/FDTD时域有限差分/ RSoft光电器件仿真设计“ 几十种案例解析,助您掌握光电器件仿真模拟

光电作为物理类专业课程中极为重要的一部分,其教学内容一直受到各个高校的重视。结合目前许多学生对实验开展的痛难点,将软件仿真引入实验当中,通过软件的可视化处理有效直观的展示光电仿真的流程,与实验数据结合,使得…...

【Verilog】布斯算法(Booth Algorithm)乘法器的 Verilog 实现

目录 布斯算法介绍 计算步骤 计算流程图 举个栗子 Verilog 实现 设计思想 Verilog 代码 TestBench 代码 仿真波形 布斯算法介绍 Booth 的算法检查有符号二的补码表示中 N位乘数 Y 的相邻位对,包括低于最低有效位 y−1 0 的隐式位。对于每个位 yi&#xf…...

【HDLBits 刷题 13】Buliding Larger Circuits

目录 写在前面 Buliding Larger Circuits count1k shiftcount fsm seq fsmshift fsm fancytimer fsm onehot 写在前面 以下的解题方法不一定为最佳解决方案,有更好的方法欢迎提出,共同学习,共同进步! Buliding Larger …...

无符号类型给有符号类型赋值符号位的问题

记一次bug问题分析问题 再写modbus通信协议解析的时候遇到一个问题,计算CRC的时候返回值是一个unsigned short,接受的时候我定义的结构体里的CRC是一个有符号 short,也是头一次遇到有无符号位的问题。下面我把具体代码贴出来。 if(pModbusWr…...

【HDLBits 刷题 9】Circuits(5)Finite State Manchines 1-9

目录 写在前面 Finite State Manchines Fsm1 Fsm1s Fsm2 Fsm2s Fsm3comb Fsm3onehot Fsm3 Fsm3s Design a Moore FSM 写在前面 HDLBits 刷题来到了最为重要的一部分---有限状态机,都说 Verilog 设计的精髓就是状态机的设计,可见状态机设计的重…...

【接口协议】FPGA 驱动 VGA 显示实验(二)实验设计部分

目录 实验任务 实验环境 实验设计 程序设计 VGA 时序模块 模块框图 仿真波形 顶层模块 约束文件 实验任务 利用FPGA驱动VGA实现彩条显示,分辨率为800 60060Hz,分别显示三种颜色。 实验环境 开发环境:vivado 2021.2 FPGA 器件&a…...

【接口协议】FPGA 驱动 VGA 显示实验(一)原理部分

目录 VGA介绍 VGA 接口管脚 VGA 色彩原理 VGA 工作原理 VGA 时序 VGA介绍 VGA(Video Graphics Array)视频图形阵列是 IBM 于 1987 年提出的一个使用模拟信号的电脑显示标准。VGA 接口即电脑采用 VGA 标准输出数据的专用接口。VGA 接口共有 15 针&am…...

COMSOL单相变压器温度场三维模型:解析热点温度与流体流速分布

comsol单相变压器温度场三维模型,可以得到变压器热点温度,流体流速分布 搞变压器温度场仿真最头疼的就是三维流固耦合。去年做配电变压器温升项目时,硬是跟COMSOL死磕了两周才摸到门道。今天给大家分享下怎么用非等温流接口抓取热点温度和油…...

【牛客网刷题】VL3 奇偶校验

👉 写在前面 👉 本系列博客记录牛客网刷题记录 👉 日拱一卒,功不唐捐! 目录 题目描述 奇偶校验 题目分析 仿真结果 题目描述 现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果(1输出奇校验&a…...

【牛客网刷题】VL2 异步复位的串联T触发器

👉 写在前面 👉 本系列博客记录牛客网刷题记录 👉 日拱一卒,功不唐捐! 目录 题目描述 题目分析 Verilog 代码 testbench 代码 仿真结果 题目描述 用verilog实现两个串联的异步复位的T触发器的逻辑&#x…...