【杂记】之语法学习第四课手写函数与结构体
函数
如同我们数学中学的 f(x) = ax + b ,函数就是把一个东西丢进去,然后进行类似的操作变化,最终得到的可以是一个数,也可能什么都得不到而只是进行一项操作。
如sqrt() , max() 和 swap() 这样的其实都是函数,我们写的 int main() 其实也是函数,名为 主函数 。这里主要讲的是手写函数。
题目描述
给出平面坐标上不在一条直线上三个点坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1,y1),(x2,y2),(x3,y3),坐标值是实数,且绝对值不超过 100.00,求围成的三角形周长。保留两位小数。
对于平面上的两个点 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2),则这两个点之间的距离 d i s = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 dis=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2} dis=(x2−x1)2+(y2−y1)2
输入格式
输入三行,第 i i i 行表示坐标 ( x i , y i ) (x_i,y_i) (xi,yi),以一个空格隔开。
输出格式
输出一个两位小数,表示由这三个坐标围成的三角形的周长。
样例输入
0 0
0 3
4 0
样例输出
12.00
数据范围
数据保证,坐标均为实数且绝对值不超过 100 100 100,小数点后最多仅有 3 3 3 位。
直接写出来的话就是:
#include<bits/stdc++.h>
using namespace std;
int main()
{double x1 , y1 , x2 , y2 , x3 , y3 , ans = 0 ;scanf("%lf%lf%lf%lf%lf%lf" ,&x1 ,&y1 ,&x2 ,&y2 ,&x3 ,&y3) ;ans += sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) ; ans += sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2)) ;ans += sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1)) ;printf("%.2lf" ,ans) ;return 0 ;
}
看起来非常丑陋,但是我们可以通过手写函数的方法来解决代码操作重复的问题。
#include<bits/stdc++.h>
using namespace std;
double dis(double a1 ,double b1 ,double a2 ,double b2)
{return sqrt((a2 - a1) * (a2 - a1) + (b2 - b1) * (b2 - b1)) ;
}
int main()
{double x1 , y1 , x2 , y2 , x3 , y3 , ans = 0 ;scanf("%lf%lf%lf%lf%lf%lf" ,&x1 ,&y1 ,&x2 ,&y2 ,&x3 ,&y3) ;ans += dis(x2 ,y2 ,x1 ,y1) ;ans += dis(x3 ,y3 ,x2 ,y2) ;ans += dis(x3 ,y3 ,x1 ,y1) ;printf("%.2lf" ,ans) ;return 0 ;
}
这样是不是就简短多了,类比我们的 f(x) = ax + b ,那么此时的 f(1) 是不是就等价于 a + b 了,同理当我们定义 dis 为
double dis(double a1 ,double b1 ,double a2 ,double b2)
{return sqrt((a2 - a1) * (a2 - a1) + (b2 - b1) * (b2 - b1)) ;
}
时,dis(x2 ,y2 ,x1 ,y1) ; 就等价于 sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) ,相当于把 x2 ,y2 ,x1 ,y1 代入到了这个函数里,得到其中return 的结果,此时我们用 double 声明这个函数,因此返还的结果为 浮点型 ,若使用 int 声明函数,则返回值为 整形 。
题目描述
输入 n n n 个不大于 1 0 5 10^5 105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。
输入格式
第一行输入一个正整数 n n n,表示整数个数。
第二行输入 n n n 个正整数 a i a_i ai,以空格隔开。
输出格式
输出一行,依次输出 a i a_i ai 中剩余的质数,以空格隔开。
样例输入
5
3 4 5 6 7
样例输出
3 5 7
数据范围
数据保证, 1 ≤ n ≤ 100 1\le n\le100 1≤n≤100, 1 ≤ a i ≤ 1 0 5 1 \leq a_i \leq 10^5 1≤ai≤105。
#include<bits/stdc++.h>
using namespace std;
bool panduan(int x)
{if(x == 1) return 0 ;//对1进行特判 for(int i = 2 ; i <= sqrt(x) ; i ++)if(x % i == 0) return 0 ;//判断从2到根号x有无x的因子 return 1 ;
}
int main()
{int n , a ;scanf("%d" ,&n) ;for(int i = 1 ; i <= n ; i ++){scanf("%d" ,&a) ;if(panduan(a)) printf("%d " ,a) ;}return 0 ;
}
这里使用了 bool 型的函数, bool 在这里可以改为用 int , bool 声明的变量只能存 0 0 0 和 1 1 1 ,可以理解为存储范围为 0 0 0 到 1 1 1 的一个整型,在 bool 声明的函数中 return 0 并不像主函数里那样意味着程序的结束运行,而是表示返还 0 0 0 ,这里的 0 0 0 和 1 1 1 改成 f a l s e false false 和 t r u e true true 也是可以的,就像:
bool panduan(int x)
{if(x == 1) return false ;//对1进行特判 for(int i = 2 ; i <= sqrt(x) ; i ++)if(x % i == 0) return false ;//判断从2到根号x有无x的因子 return true ;
}
这里我没有搞一个数组先把 a [ i ] a[i] a[i] 存下来,而是每次读入一个 a a a 就判断是否为质数,要理解评测机的运行规则,可以把输入和输出当成两个文件,对于一组测试数据,所有的输入都放在一起,所有的输出也都放在一起,输入输出是分开的,所以一遍输入一边输出是非常可行的,最后将你的输出结果和标准答案进行对比,如果一样则结果正确。
另外一点很重要的是这里判断是否为素数时,利用 试除法 ,即对一个数 i i i 进行取余运算,若没有余数,则说明 i i i 是这个数的因数,既然有因数了,就说明不是素数。
理解为什么 试除法 是从 2 2 2 判断到 n \sqrt n n ,举例对于 16 16 16 , 16 = 4 \sqrt{16} = 4 16=4 , 16 16 16 的因子有 1 , 2 , 4 , 8 , 16 1,2,4,8,16 1,2,4,8,16 ,既然是因子,就一定是至少需要两个数相乘(本身除外),比如你知道了 1 1 1 是 16 16 16 的因子,那么就可以想到另一个因子是 16 / 1 = 16 16 / 1 = 16 16/1=16 ;知道 2 2 2 是 16 16 16 的一个因子,就可以知道 16 / 2 = 8 16/2=8 16/2=8 是 16 16 16 的一个因子,不难看出,对于一个数 n n n ,它的因子总在 n \sqrt n n 成一个一个对应,还以 16 16 16 为例子就是 1 1 1 对应 16 16 16 , 2 2 2 对应 8 8 8 , 4 4 4 对应 4 4 4 。
这样我们在判断是否有因子的时候就可以将时间复杂度从 O ( n ) O(n) O(n) 降低到 O ( n ) O(\sqrt n) O(n) ,大大缩短运行时间,减少 T L E TLE TLE 的出现。
bool 函数的其他用法
#include<bits/stdc++.h>
using namespace std;
int main()
{int a[10] ;for(int i = 1 ; i <= 5 ; i ++)scanf("%d" ,&a[i]) ;sort(a + 1 , a + 1 + 5) ;for(int i = 1 ; i <= 5 ; i ++)printf("%d " ,a[i]) ;return 0 ;
}
在 c++ 中有一个内置函数 sort ,其作用是将数组按照从小到大排序,如上格式,将数组从 a [ 1 ] a[1] a[1] 到 a [ 5 ] a[5] a[5] 进行排序,可以写成 sort(a + 1 , a + 1 + 5) ; ,理解的话就理解为对于数组 a a a ,使用时候下标是从 0 0 0 开始的,因此想排序从 1 1 1 到 N N N 要写成 sort(a + 1 , a + 1 + N) ; 这样的形式。
如果希望从小到大排序,可以声明一个 b o o l bool bool 型变量:
bool mycmp(int x , int y)
{return x > y ;
}
使用时写成:
#include<bits/stdc++.h>
using namespace std;
bool mycmp(int x , int y)
{return x > y ;
}
int main()
{int a[10] ;for(int i = 1 ; i <= 5 ; i ++)scanf("%d" ,&a[i]) ;sort(a + 1 , a + 1 + 5 , mycmp) ;for(int i = 1 ; i <= 5 ; i ++)printf("%d " ,a[i]) ;return 0 ;
}
void 声明的函数
v o i d void void 声明的函数没有返回值,但还是要写 return ; 。
题目描述
因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 151 是回文质数。
写一个程序来找出范围 [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 , 000 ) [a,b] (5 \le a < b \le 100,000,000) [a,b](5≤a<b≤100,000,000)(一亿)间的所有回文质数。
输入格式
第一行输入两个正整数 a a a 和 b b b。
输出格式
输出一个回文质数的列表,一行一个。
样例输入
5 500
样例输出
5
7
11
101
131
151
181
191
313
353
373
383
提示
Hint 1: Generate the palindromes and see if they are prime.
提示 1: 找出所有的回文数再判断它们是不是质数(素数).
Hint 2: Generate palindromes by combining digits properly. You might need more than one of the loops like below.
提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。
题目翻译来自NOCOW。
USACO Training Section 1.5
产生长度为 5 5 5 的回文数:
for (d1 = 1; d1 <= 9; d1+=2) { // 只有奇数才会是素数for (d2 = 0; d2 <= 9; d2++) {for (d3 = 0; d3 <= 9; d3++) {palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...)}}}
这里分享一个洛谷 88 88 88 分的做法:
#include<bits/stdc++.h>
using namespace std;
int v[10000010] , pri[10000010] , a[20] , tot , n , m ;
void primes(int x)
{memset(v , 0 , sizeof(v)) ;//v[i]所存的数表示i的最小质因子 tot = 0 ; //记录质数的数量,对于数组来说相当于一个箭头 for(int i = 2 ; i <= x ; i ++){if(v[i] == 0)//v[i]为0说明在这之前i没有因子,即i为质数 {v[i] = i ;pri[++ tot] = i ;}for(int j = 1 ; j <= tot ; j ++){if(pri[j] > v[i] || pri[j] > x / i) break ;//如果i有比pri[j]更小的质因子或超出n的范围,则停止循环 v[i * pri[j]] = pri[j] ;//pri[j]是i * pri[j] 的最小质因子 }}return ;
}
bool huiwen(int x)
{int len = 0 ;while(x){a[++ len] = x % 10 ;x /= 10 ;}for(int i = 1 , j = len ; i < j ; i ++ , j --)if(a[i] != a[j]) return false ;return true ;
}
int main()
{scanf("%d%d" ,&n ,&m) ;primes(m) ;for(int i = 1 ; i <= tot ; i ++){if(pri[i] > m) break ;if(pri[i] >= n && huiwen(pri[i])) printf("%d\n" ,pri[i]) ;}return 0 ;
}
由于题中数据范围到 1 0 8 10^{8} 108 ,数组 v v v 也至少声明这么大,但是会导致爆空间 M L E MLE MLE ,但不开这么大则会造成运行时错误 R E RE RE 。
结构体
题目描述
有 n n n 名同学,每名同学有语文、数学、英语三科成绩,你需要按照如下规则对所有同学的成绩从高到低排序:
- 比较总分,高者靠前;
- 如果总分相同,则比较语文和数学两科的总分,高者靠前;
- 如果仍相同,则比较语文和数学两科的最高分,高者靠前;
- 如果仍相同,则二人并列。
你需要输出每位同学的排名,如遇 x x x 人并列,则他们排名相同,并留空后面的 x − 1 x - 1 x−1 个名次。例如,有 3 3 3 名同学并列第 1 1 1,则后一名同学自动成为第 4 4 4 名。
输入格式
第一行一个整数 N N N,表示同学的人数。
接下来 N N N 行,每行三个非负整数 c i , m i , e i c_i, m_i, e_i ci,mi,ei 分别表示该名同学的语文、数学、英语成绩。
输出格式
输出 N N N 行,按输入同学的顺序,输出他们的排名。
注意:请不要按排名输出同学的序号,而是按同学的顺序输出他们各自的排名。
样例输入
6
140 140 150
140 149 140
148 141 140
141 148 140
145 145 139
0 0 0
样例输出
1
3
4
4
2
6
数据范围
- 对 30 % 30\% 30% 的数据, N ≤ 100 N \leq 100 N≤100,且所有同学总分各不相同。
- 对全部的测试数据,保证 2 ≤ N ≤ 1 0 4 2 \leq N \leq 10^4 2≤N≤104, 0 ≤ c i , m i , e i ≤ 150 0 \leq c_i, m_i, e_i \leq 150 0≤ci,mi,ei≤150。
#include<bits/stdc++.h>
using namespace std;
int n ;
struct stu
{int c , z , e , m , zg , cm , id , rank ;
}t[100010];
bool mycmp1(stu x , stu y)
{if(x.z != y.z) return x.z > y.z ;else if(x.cm != y.cm) return x.cm > y.cm ;else if(x.zg != y.zg) return x.zg > y.zg ;else return x.id < y.id ;
}
bool mycmp2(stu x , stu y)
{return x.id < y.id ;
}
int main()
{scanf("%d" ,&n) ;for(int i = 1 ; i <= n ; i ++){scanf("%d%d%d" ,&t[i].c ,&t[i].m ,&t[i].e) ;t[i].z = t[i].c + t[i].m + t[i].e ;t[i].cm = t[i].c + t[i].m ;t[i].zg = max(t[i].c , t[i].m) ;t[i].id = i ;}sort(t + 1 , t + 1 + n , mycmp1) ;t[1].rank = 1 ;for(int i = 2 ; i <= n ; i ++){if(t[i].z == t[i - 1].z && t[i].cm == t[i - 1].cm && t[i].zg == t[i - 1].zg)t[i].rank = t[i - 1].rank ;else t[i].rank = i ;}sort(t + 1 , t + 1 + n , mycmp2) ;for(int i = 1 ; i <= n ; i ++)printf("%d\n" ,t[i].rank) ;return 0 ;
}
类比我们用 int 和 double 等声明不同类型的变量,结构体 也可理解为我们新定义了一种新的数据类型,可以用 stu 声明这个变量,其中包含了 c , z ,m ... 这样的元素,因此 结构体 的声明也可以写成:
struct stu
{int c , z , e , m , zg , cm , id , rank ;
};stu t[100010] ;
相关文章:
【杂记】之语法学习第四课手写函数与结构体
函数 如同我们数学中学的 f(x) ax b ,函数就是把一个东西丢进去,然后进行类似的操作变化,最终得到的可以是一个数,也可能什么都得不到而只是进行一项操作。 如sqrt() , max() 和 swap() 这样的其实都是函数&#x…...
细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法
目录 一、工程目的 1、目标 2、通讯协议及应对错误指令的处理目标 二、工程设置 三、程序改进 四、下载与调试 1、合规的指令 2、不以#开头,但以;结束,长度不限 3、以#开头,不以;结束,也不包含;,长…...
python使用turtle画图快速入门,轻松完成作业练习
turtle介绍 turtle是一个绘图库,可以通过编程进行绘图。其模拟了一个乌龟在屏幕上的运动过程。该库通常用于给青少年学习编程,当然,也可以使用其进行作图。 在一些学校中,可能在python学习的课程中,要求完成turtle绘…...
【C++】新手入门指南
> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 …...
C++使用开源ConcurrentQueue库处理自定义业务数据类
ConcurrentQueue开源库介绍 ConcurrentQueue是一个高性能的、线程安全的并发队列库。它旨在提供高效、无锁的数据结构,适用于多线程环境中的数据交换。concurrentqueue 支持多个生产者和多个消费者,并且提供了多种配置选项来优化性能和内存使用。 Conc…...
在vue3的vite网络请求报错 [vite] http proxy error:
在开发的过程中 代理proxy报错: [vite] http proxy error: /ranking/hostRank?dateType1 Error: connect ETIMEDOUT 43.xxx.xxx.xxx:443 网络请求是http的: // vite.config.ts import { Agent } from node:http;server: {host: 0.0.0.0,port: port,open: true,https: false,…...
ElasticSearch 简单的查询。查询存在该字段的资源,更新,统计
1.查询存在该字段的数据 {"query": {"bool": {"must": [{"exists": { "field": "chainCode"}}],"must_not": {"exists": {"field": "isDelete"}}}} } 备注:…...
FOFA使用教程之从零到精通
FOFA使用教程之从零到精通 前言一、关于网络资产测绘的概念1、啥是网络空间资产测绘2、啥是互联网资产二、FOFA的简要介绍1、FOFA地址是啥?2、关于FOFA的简要介绍三、FOFA精讲1、运算符规则详解① 关于 = 号的使用说明② 关于 == 号的使用说明③ 关于 && 号的使用说明…...
【提高篇】3.2 GPIO(二,基本结构)
目录 一,GPIO的基本结构 二,保护二极管 三,上拉、下拉电阻 四,施密特触发器 五,P-MOS 管和 N-MOS 管 P-MOS管和N-MOS管的区别 六,片上外设 七,IDR,ODR,BSRR寄存器 7.1 IDR(Input Data Register) 7.2 ODR(Output Data Register) 7.3 BSRR(Bit Set/Rese…...
UE hard/soft reference| DDX DDY | Unity pcg color
目录 1.虚幻引擎性能优化 (附0跳转Unity对应机制) hard reference and soft reference 1. 硬引用(Hard Reference) 2. 软引用(Soft Reference) 3. 使用原则 2.空间梯度转法线 DDX DDY节点 编辑 …...
macOS 应用公证指南:使用 fastlane 实现自动化公证流程
背景介绍 在 macOS 系统上,为了保护用户安全,Apple 要求开发者对未通过 Mac App Store 分发的应用程序进行公证(Notarization)。如果应用程序没有经过公证,用户在运行时会看到警告弹窗,这会影响用户体验。虽然开启沙箱模式的应用可以直接通过 App Store 分发来避免这个问题…...
深度学习:解密图像、音频和视频数据的“理解”之道20241105
🔍 深度学习:解密图像、音频和视频数据的“理解”之道 深度学习已然成为人工智能领域的中流砥柱,它如何处理不同类型的数据(如图像、音频、视频)?如何将这些数据转换成计算机能理解和学习的“语言”&#…...
uniapp 实现瀑布流
效果演示 组件下载 瀑布流布局-waterfall - DCloud 插件市场...
计算机毕业设计 | springboot+vue智慧工地管理系统 前后端分离后台管理(附源码+文档)
1,项目介绍 管理信息是重要的资源、管理信息是决策的基础。同时管理信息是实施管理控制的依据以及是联系组织内外的纽带。对于企业,最重要的5大资源包括人、物资、能源、资金、信息。人、物资、能源、资金是可以看见的有形资源,信息则是一种…...
vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装
一、下载 html2Canvas jspdf npm install jspdf html2canvas二、封装转换下载方法 htmlToPdf.js import html2Canvas from html2canvas import JsPDF from jspdf/*** param {*} reportName 下载时候的标题* param {*} isDownload 是否下载默认为下载,传false不…...
Ubuntu下如何管理多个ssh密钥
Ubuntu下如何管理多个ssh密钥 前言 我一直在逃避这个问题,误以为我能够单纯地用一个 ssh 走天下。 好吧,现实是我不得不管理多个 ssh 做,那就写个博客总结一下吧。 查阅后发现前人已经总结了不少,那我就结合之后ÿ…...
[vulnhub] DarkHole: 1
https://www.vulnhub.com/entry/darkhole-1,724/ 端口扫描主机发现 探测存活主机,184是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 09:59 CST Nmap scan report for 192.168.75.1 Host is up (0.00027s latency). MA…...
商淘云连锁企业管理五大功能 收银系统助力门店进销存同步
连锁企业管理的五大功能相互协作,共同确保连锁门店能够高效运营、降低成本、提升客户满意度,并最终实现盈利目标。今天,商淘云分享连锁企业管理的五大功能: 1、进销存管理:进销存管理是连锁企业的基础功能之一…...
统信UOS开发环境支持Perl
UOS凭借广泛的编程语言支持,为开发者构建了一个高效灵活的开发环境,无需担心环境兼容性问题。 文章目录 一、环境部署1. Perl开发环境安装2. Perl开发环境配置环境变量配置模块管理器编辑器集成调试工具二、代码示例文件处理Web开发三、常见问题1. 依赖管理问题2. 性能问题3.…...
Stable Diffusion Web UI - ControlNet 姿势控制 openpose
openpose 是 ControlNet 中常用的控制模式之一。 通过 openpose 可以锁定人物姿势,把姿势信息传递给 Stable Diffusion 扩散模型,让其在扩散生成图片的时候遵照特定的任务姿势。 通过 openpose 能够得到类似如下效果: 同样的姿势࿰…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
