【ios】---swift开发从入门到放弃
swift开发从入门到放弃
- 环境
- swift入门
- 变量与常量
- 类型安全和类型推断
- print函数
- 字符串
- 整数
- 双精度
- 布尔
- 运算符
- 数组
- 集合set
- 字典
- 区间
- 元祖
- 可选类型
- 循环语句
- 条件语句
- switch语句
- 函数
- 枚举类型
- 闭包
- 数组方法
- 结构体
环境
1.在App Store下载Xcode
2.新建项目(可以先使用这个,简单入手快)
3.运行代码(快捷键 command + r)
swift入门
变量与常量
var
声明变量
let
声明常量
var name = "東三城"
name = "西三城"
print(name) // 西三城let pi = 3.14var a = 1, b = 2var 姓名 = "東三城" // 支持中文
var 😺 = "cat" // 支持符号
print(姓名, 😺) // 東三城 cat
类型安全和类型推断
var age = 18
age = "刚满十八岁"
// 同一种数据类型才能赋值
var age = 18.0
age = 18
print(age) // 18.0
var a = "東"
var b = 18
var c = 18.0
var d = true
print(type(of: a)) // String
print(type(of: b)) // Int
print(type(of: c)) // Double
print(type(of: d)) // Bool
print函数
// 分割
print(18, "a", 18.0, false, separator: "---") // 18---a---18.0---false// 终止符
print(18, "a", 18.0, false, separator: "---", terminator: "\t")
print("bbb") // 18---a---18.0---false bbb
字符串
// 声明空串
var emptyText = ""
var emptyText1 = String()// 重复
var text = String(repeating: "東", count: 3)
print(text) // 東東東// 多行文本
var text1 = """
東
三
城
"""// 多行文本输出单行
var text1 = """
東\
三\
城
"""// 输出双引号
var text1 = "\"東三城\""
print(text1) // "東三城"
var text2 = #""123東'三城""#
print(text2) // "123東'三城"// 拼接
var name = "東三城"
var work = "写代码"
print(name + work) // 東三城写代码
print(name.appending(work)) // 東三城写代码
name += work
print(name) // 東三城写代码
print("\(name)工作是\(work)") // 東三城工作是写代码// 判空
var name = "東三城"
print(name.isEmpty) // false// 字符串长度
var name = "東三城"
print(name.count) // 3// 取值
var name = "東三城"
print(name.description) // 東三城
print(name.debugDescription) // "東三城" 便于调试
print(name.hashValue) // 8034415610457256684// 大写
var str = "This is a Str"
print(str.uppercased()) // THIS IS A STR// 小写
print(str.lowercased()) // this is a str// 相等 不等
print("ab" == "ab") // true
print("ab" != "ab") // false// 前缀/后缀
print("productName".hasPrefix("product")) // true
print("productName".hasSuffix("Name")) // true// 遍历
var str = "123abc東三城🦄"
for item in str{print(item)
}
for index in str.indices{print(index)
}
for index in str.indices{print(str[index])
}
// 索引
var str = "123abc東三城🦄"
print(str[str.startIndex]) // 1
print(str[str.index(before: str.endIndex)]) // 🦄
print(str[str.index(str.endIndex,offsetBy: -2)]) // 城
整数
var a = 1
var b = 2.0
print(type(of: a),type(of: b)) // Int Doublevar c:Float = 3.3
print(type(of: c)) // Floatvar a = 0b10 // 2进制 2
var b = 0o7 // 8进制 7
var c = 0xf // 16进制 15
var d = 89_000_000 // 89000000
print(a,b,c,d)// 判断
var num = Int("東") ?? 0
print(num) // 0// 随机数
print(Int.random(in: 1...100))
print(Int.random(in: 1..<100))// + - * / == != > < // 相反数
var num = 18
num.negate()
print(num) // -18// 绝对值
var num = -18
print(num.magnitude) // 18
print(abs(-18)) // 18// 商 余数
var x = 100
let (q, r) = x.quotientAndRemainder(dividingBy: 9)
print(q,r) // 11 1// 符号
var x = 100
print(x.signum()) // 1。 正数1 0为0 负数-1// 常量
print(Int.zero) // 0
print(Int.max) // 9223372036854775807
print(Int.min) // -9223372036854775808
双精度
var x = 18.0
var y:Double = 18.0
var z = Double(18)// 随机数
print(Double.random(in: 10.0...100.0)) // 20.736881407455332// 平方根
print(25.squareRoot()) // 5// 四舍五入
print(25.1.rounded(.down)) // 25// 常量
print(Double.pi) // 3.141592653589793
布尔
var x = true
var y:Bool = falseif x { }
if x == true { }// 取反
x.toggle()// 随机
print(Bool.random())
运算符
print( -a ) // 一元运算符
print( 1 + 3 ) // 两元运算符
print( 3 > 2 ? 10 : 20) // 三元运算符// 赋值运算符 = // 算数运算符 + - * / % += -= *= /= %=// 比较运算符 > >= < <= != ==// 空合运算符
var str:String? = nil
print(str ?? "")// 区间运算
1...10
1..<9// 逻辑运算符 && || !
数组
var arr = [1, 2, 3]
var arr1:Array<Int> = [1, 2, 3]
print(arr1) // [1, 2, 3]var arr2:[String] = ["a", "b", "c"]var b1 = Array<Int>() // []
var b2 = Array<Int>([1, 2]) // [1, 2]
var b3 = Array(1...4) // [1, 2, 3, 4]var c1 = Array(repeating: "*", count: 3) // ***// 数组长度
c1.count// 是否为空
c1.isEmpty// 访问数组元素
print(b3[0]) // 1
print(b3[0...2]) // [1, 2, 3]// 遍历
for item in b3 {print(item)
}// 带下标
for (index, value) in b3.enumerated(){print(index, value)
}var arr:Array<String> = ["张三", "李四", "王五"]
print(arr.first ?? "") // 张三
print(arr.last ?? "") // 王五// 随机元素
print(arr.randomElement() ?? "")// 添加
arr.append("赵六")
arr.append(contentsOf: ["mike", "anna"])
arr += ["🐶"]// 插入
arr.insert("叶子", at: 0)
arr.insert(contentsOf: ["花", "太阳", "雨" ], at: 1)
print(arr) //["叶子", "花", "太阳", "雨", "张三", "李四", "王五", "赵六", "mike", "anna"]// 替换
arr.replaceSubrange(0...1, with: ["a", "b", "c"])
print(arr) // ["a", "b", "c", "太阳", "雨", "张三", "李四", "王五", "赵六", "mike", "anna"]// 删除
arr.remove(at: 3)
arr.removeFirst()
arr.removeLast()
arr.removeAll()// 查找
var isA = arr.contains("a")
var isB = arr.first(where: {$0 == "b"})// 遍历
t.forEach({ item inprint(item)
})// 排序
var arr = [1, 2, 3]
arr.sort(by: >)
arr.sort() // 默认小于// 乱序
var t = ["叶子", "花", "太阳", "雨", "张三", "李四", "王五", "赵六", "mike", "anna"]
t.shuffle()
print(t) // ["赵六", "张三", "花", "李四", "雨", "太阳", "anna", "叶子", "王五", "mike"]// 反转
var t = ["叶子", "花", "太阳", "雨", "张三", "李四", "王五", "赵六", "mike", "anna"]
t.reverse()
print(t) // ["anna", "mike", "赵六", "王五", "李四", "张三", "雨", "太阳", "花", "叶子"]// 分割
var line = "apple orange banana"
print(line.split(separator: " ")) // ["apple", "orange", "banana"]var line1 = "apple orange+banana"
var l1 = line1.split(whereSeparator: {$0 == "+" || $0 == " "
})
print(l1) // ["apple", "orange", "banana"]// 连接
var line = ["apple", "orange", "banana"]
print(line.joined()) // appleorangebanana
print(line.joined(separator: "-")) // apple-orange-banana
集合set
var s:Set<Int> = [1, 2, 3, 4, 4]
var s1 = Set([1, 2, 3, 4])
print(s, s1) // [2, 3, 1, 4] [4, 1, 3, 2]// 长度
print(s.count) // 4// 是否空
print(s.isEmpty) // false// 插入
var (c, d) = s.insert(6)
print(c, d) // true 6s.update(with: 7)
print(s) // [2, 6, 1, 3, 7, 4]// 删除
s.remove(7)
print(s) // [2, 3, 1, 4, 6]
s.removeAll()
var a = Set(["苹果","香蕉", "桔子", "柚子", "橙子"])
var b = Set(["桃子","香蕉", "桔子", "甜瓜", "西瓜"])
var c = Set(["桃子"])// 相加
print(a.union(b)) // ["桔子", "柚子", "甜瓜", "香蕉", "桃子", "苹果", "橙子", "西瓜"]// 相减
print(a.subtracting(b)) // ["柚子", "苹果", "橙子"]// 相交
print(a.intersection(b)) // ["桔子", "香蕉"]// 异或
print(a.symmetricDifference(b)) // ["桃子", "苹果", "柚子", "橙子", "甜瓜", "西瓜"]// 是否子集
print(c.isSubset(of: a)) // false// 是否超集
print(a.isSuperset(of: c)) // false// 随机
print(a.randomElement() ?? "")// a.map()
// a.sorted()
// a.shuffled()// 遍历
for item in a {print(item)
}
for (index,item) in a.enumerated(){print(index,item)
}
a.forEach({print($0)
})
字典
var a:Dictionary<Int, String> = [:] // 空字典
var b:Dictionary<Int, String> = [1: "apple", 2: "orange"]
print(b) // [1: "apple", 2: "orange"]// 查找
print(b[3,default: "无"]) // 无// 长度
print(b.count) // 2// 是否为空
print(b.isEmpty) // false// 遍历
for (k,v) in b {print(k, v)
}
for k in b.keys {print(k)
}
b.forEach({print($0, $1)
})// 随机
print(b.randomElement() ?? "")
区间
var a = 1...3 // ClosedRange<Int> 闭区间
var b = 1..<3 // Range<Int> 区间
var c = ...3 // PartialRangeThrough<Int> 半开区间
var d = ..<3 // PartialRangeUpTo<Int>
var e = 1... // PartialRangeFrom<Int>
var f = "a"..."z" // ClosedRange<String>
var g = 0.0...10.0 // ClosedRange<Double>
var h = stride(from: 10, to: 100, by: 2) // StrideTo<Int>var r1:ClosedRange<String> = "a"..."z"for i in a {print(i)
}// 包含
print(a.contains(11)) // false// 是否为空
print(a.isEmpty)// 上限
print(a.upperBound)// 下限
print(a.lowerBound)
元祖
var p = (10, 20)
var p1:(Int, Int) = (20, 30)var position = (x:30, y:40)print(p.0) // 10
print(position.x) // 30// 解构
let (x, y) = position
print(x, y)
可选类型
var i = Int("1")
print(i) // Optional(1)
print(i!) // 1// (真正类型,nil)var a:String? = "a" // 声明加?
print(type(of: a)) // Optional<String>
var b:Optional<Int> = 10
print(type(of: b)) // Optional<Int>var c:Int? = 11if let d = c{if d > 10 {print("a大于10")}
}var s:String? = "ProductA"
print(s?.hasPrefix("Product")) // Optional(true)
if let b = s?.hasPrefix("Product"){print("有这个前缀", b, type(of: b)) // 有这个前缀 true Bool
}print(s ?? "空") // ProductAlet number = Int("34")
print(number) // Optional(34)
print(number!) // 解包 34
循环语句
for i in 1...5 {print(i)
}var index = 0
while index <= 10{print(index)index += 1
}var index1 = 0
repeat { print(index1)index1 += 1
} while index1 <= 10var i = 1
while i < 10 {if i == 5 {break // 跳出循环}i += 1
}
print(i) // 5
条件语句
var score = 99
var check = score > 60 ? "合格" : "不合格"
print(check)if(score > 60){print("合格")
} else {print("不合格")
}if score > 90 {print("优")
} else if score > 80 {print("良")
} else if score > 70 {print("中")
} else {print("差")
}print("请输入成绩:", terminator: "")
var input = readLine()!if let score1 = Int(input) {if score1 > 90 {print("优")} else if score1 > 80 {print("良")} else if score1 > 70 {print("中")} else {print("差")}
}
switch语句
print("请输入成绩:", terminator: "")
var input = readLine()!if let score1 = Int(input) {switch score1 {case 100:print("牛")breakcase 90...99:print("优")case 81, 82, 83, 84, 85, 86, 87, 88, 89:print("良")case 60...80:print("合格")fallthroughdefault:print("不及格")}}var score = 88
switch score {
case (let s) where s > 90:print("牛")
case (let x) where x > 80:print("行")
default:print("不行")
}
函数
// 定义
func hello(){print("hello")
}
// 调用
hello()// 参数
func hello1(name:String){print("\(name),你好")
}
hello1(name: "東三城")// 返回值
func hello2(name:String) -> String{return "\(name),你好"
}
var hello2msg = hello2(name: "東三城")
print(hello2msg)// 双参数双返回值
func max(a:Int,b:Int) -> (maxNum:Int, minNum:Int){return a > b ? (a, b) : (b, a)
}
let (maxNum, minNum) = max(a: 3, b: 4)
print(maxNum, minNum) // 4 3// 对外显示参数别名
func num1(oneNum a:Int, twoNum b:Int) -> Int {return a + b
}
let x = num1(oneNum: 1, twoNum: 2)
print(x) // 3// 不对外显示参数名
func num2(_ a:Int, _ b:Int) -> Int {return a + b
}
print(num2(1, 2)) // 3// 不确定参数个数
func num3 (_ num:Int... ) -> Int {var s = 0for i in num{s += i}return s
}
print(num3(1, 56, 78, 2, 59)) // 196// 参数默认值
func sum4(a:Int = 10) -> Int {return a + 1
}
print(sum4()) // 11
枚举类型
enum WeekDay {case Moncase Thecase Wedcase Thucase Fricase Satcase Sun
}
let a = WeekDay.Mon
print(a) // Monvar b:WeekDay = WeekDay.Theenum Direction:CaseIterable { // 可遍历的协议case west, east, south, north
}var c = Direction.east
c = .north // 可省略
print(c)
// 遍历
Direction.allCases.forEach({print($0, terminator: "\t")
})// 匹配枚举
switch c{
case .east:print("东")
case .north:print("北")
case .south:print("南")
case .west:print("西")
}enum PlayerState{case idlecase walk(speed:Int)case run(speed:Int)case fly(speed:Int, height:Int)case die
}
let a1 = PlayerState.fly(speed: 800, height: 1000) // 关联值
switch a1{
case .idle:print("玩家正在待机")
case .walk(let speed):print("玩家正在以速度\(speed)行走")
case .run(let speed):print("玩家正在以速度\(speed)奔跑")
case .fly(let speed, let height):print("玩家在\(height)高空以速度\(speed)飞行")
case .die:print("玩家已死 ")
}// 原始值
enum Gender:Int {case man = 10case womencase unknow
}
print(Gender.man.rawValue) // 0 +10
print(Gender.women.rawValue) // 1 + 10
print(Gender.unknow.rawValue) // 2 + 10// 描述(description是每一种数据类型都有的,重新定义了一下)
enum Weather {case sunny,cloudy,rainy,sonwy,windyvar description:String {switch self {case .sunny:return "晴天"case .cloudy:return "多云"case .rainy:return "雨天"case .sonwy:return "下雪"case .windy:return "大风"}}
}
print(Weather.cloudy.description)enum Shape {case retangle(width: Double, height: Double)case circle(redius: Double)case triangle(side1: Double, side2: Double, side3: Double)var description: Double {switch self {case .circle(let radius):return Double.pi * radius * radiuscase .retangle(let width,let height):return width * heightcase .triangle(let side1,let side2,let side3):return (side1 * side2 * side3) / (2 * sqrt(side1 * side2 * side3))}}
}print(Shape.circle(redius: 10).description)
闭包
// 函数 ()->Void
func hello(){print("hello")
}
hello()// 匿名函数
let hi = {print("hi")
}
hi()let hi1 = { (name: String) inprint("你好\(name)")
}
hi1("東三城")func sum(a:Int, b:Int) -> Int {a + b
}
print(sum(a: 10, b: 8))let s = {(a:Int, b:Int) -> Int ina+b
}
print(s(8, 10))func sayHi(action:() -> Void ){action()print("東三城")
}
let hi2 = {print("你好")
}
sayHi(action: hi2)
// 尾随闭包
sayHi {print("hello")
}// 函数的参数是另一个函数
func travel(action:(String) -> Void) {print("我现在出发")action("洛阳")print("我已经到了")
}
travel{(place: String) inprint("我坐火车去\(place)")
}// 有参数有返回值
func travel1(action:(String, Int) -> String) {print("我现在出发")print(action("洛阳",120))print("我已经到了")
}
travel1{(place: String,speed: Int) -> String inreturn "我坐火车已\(speed)km/h去\(place)"
}
travel1{"我坐火车已\($1)km/h去\($0)"
}func travel2() -> (String) -> Void{return {(place: String) inprint("我想去\(place)")}
}
let r = travel2()
r("郑州")
数组方法
let numbers = [1, 2, 3, 4, 5, 6, 7, 8 ,9, 10]// map 产生新的数组,每一个元素要经过map加工
let n1 = numbers.map{$0 * $0
}// filter 产生新的数组,每一个元素要经过filter的判断过滤,true返回,false抛弃
let n2 = numbers.filter{$0 > 5
}let n3 = numbers.reduce(0, {$0 + $1
})
print(n1, n2, n3)
结构体
struct Student {static let tableName = "学生表"var name = ""var age:Int? = nilvar chinese:Int? = nilvar math:Int? = nilvar total:Int? = nilmutating func calc(){self.total = self.chinese! + self.math!}
}var dong = Student(name: "東三城", age: 18, chinese: 99, math: 99) // 实例化
dong.calc()
print(dong)
如有不足,请多指教,
未完待续,持续更新!
大家一起进步!
相关文章:

【ios】---swift开发从入门到放弃
swift开发从入门到放弃 环境swift入门变量与常量类型安全和类型推断print函数字符串整数双精度布尔运算符数组集合set字典区间元祖可选类型循环语句条件语句switch语句函数枚举类型闭包数组方法结构体 环境 1.在App Store下载Xcode 2.新建项目(可以先使用这个&…...

【AUTOSAR 基础软件】PduR模块详解(通信路由)
文章包含了AUTOSAR基础软件(BSW)中PduR模块相关的内容详解。本文从AUTOSAR规范解析,ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解PduR这一基础软件模块。文中涉及的ISOLAR-AB配置以及模块相关代码都是依托于ETAS提供的…...

[控制理论]—差分变换法与双线性变换法的基本原理和代码实现
差分变换法与双线性变换法的基本原理和代码实现 1.差分变换法 差分变换法就是把微分方程中的导数用有限差分来近似等效,得到一个与原微分方程逼近的差分方程。 差分变换法包括后向差分与前向差分。 1.1 后向差分法 差分变换如下: d e ( t ) d t e…...

【JavaEE】——多线程常用类
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 引入: 一:Callable和FutureTask类 1:对比Runnable 2:…...

Cilium-实战系列-(二)Cilium-Multi Networking-多网络
一、Cilium必要开启的功能 1、enable-multi-network 2、ipam模式选择:multi-pool 二、涉及的CRD资源 1、 ciliumpodippools.cilium.io *通过Cilium管理节点上的pod cidr.网络分为主网络和第二网络。 *主网络的 ciliumpodippools.cilium.io default根据配置文件默认生成的。 …...

springboot自动配置
自动配置的核心就在SpringBootApplication注解上,SpringBootApplication这个注解 底层包含了3个注解,分别是: SpringBootConfiguration ComponentScan EnableAutoConfiguration EnableAutoConfiguration这个注解才是自动配置的核心,它 封…...

mock数据,不使用springboot的单元测试
业务代码 package com.haier.configure.service.impl;import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.haier.common.util.RequestUtil; import com.haier.configure.entity.Langua…...

【pytorch】pytorch入门5:最大池化层(Pooling layers )
文章目录 前言一、定义概念 缩写二、参数三、最大池化操作四、使用步骤总结参考文献 前言 使用 B站小土堆课程 一、定义概念 缩写 池化(Pooling)是深度学习中常用的一种操作,用于降低卷积神经网络(CNN)或循环神经网…...

职场上的人情世故,你知多少?这五点一定要了解
职场是一个由人组成的复杂社交网络,人情世故在其中起着至关重要的作用。良好的人际关系可以帮助我们更好地融入团队,提升工作效率,甚至影响职业发展。在职场中,我们需要了解一些关键要素,以更好地处理人际关系…...

Python | Leetcode Python题解之第456题132模式
题目: 题解: class Solution:def find132pattern(self, nums: List[int]) -> bool:candidate_i, candidate_j [-nums[0]], [-nums[0]]for v in nums[1:]:idx_i bisect.bisect_right(candidate_i, -v)idx_j bisect.bisect_left(candidate_j, -v)if…...

【重学 MySQL】五十四、整型数据类型
【重学 MySQL】五十四、整型数据类型 整型类型TINYINTSMALLINTMEDIUMINTINT(或INTEGER)BIGINT 可选属性UNSIGNEDZEROFILL显示宽度(M)AUTO_INCREMENT注意事项 适合场景TINYINTSMALLINTMEDIUMINTINT(或INTEGER࿰…...

查看 Git 对象存储中的内容
查看 Git 对象存储中的内容 ls -C .git/objects/<dir>ls: 列出目录内容的命令。-C: 以列的形式显示内容。.git/objects/<dir>: .git 是存储仓库信息的 Git 目录,objects 是其中存储对象的子目录。<dir> 是对象存储目录下的一个特定的子目录。 此…...

Redis 中热 Key 的判定及其解决方案
引言 Redis 作为高效的内存数据库,常用于缓存、消息队列等场景。随着数据量和并发量的增加,某些数据的访问频率会远远高于其他数据,这些被频繁访问的 Key 被称为 热 Key。热 Key 问题是 Redis 应用中常见的性能瓶颈之一,它可能导…...

elasticsearch创建索引
1对比关系型数据库,创建索引就等同于创建数据库 在postman中,向ES服务器发PUT请求 显示已经创建成功了 http://192.168.1.108:9200/shopping 请求方式get http://192.168.1.108:9200/shopping 请求全部的index的url地址 get 请求 http://192.168.1.10…...

【STM32单片机_(HAL库)】4-2-1【定时器TIM】定时器输出PWM实现呼吸灯实验
1.硬件 STM32单片机最小系统LED灯模块 2.软件 pwm驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器输出PWM配置步骤main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "pwm.h"int main(void) {HA…...

计算机网络:物理层 —— 信道复用技术
文章目录 信道信道复用技术信道复用技术的作用基本原理常用的信道复用技术频分复用 FDM时分复用 TDM波分复用 WDM码分复用 CDM码片向量基本原理 信道 信道是指信息传输的通道或介质。在通信中,信道扮演着传输信息的媒介的角色,将发送方发送的信号传递给…...

期权懂|期权交易涨跌幅限制会随时调整吗?
本期让我懂 你就懂的期权懂带大家来了解,期权交易涨跌幅限制会随时调整吗?有兴趣的朋友可以看一下。期权小懂每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 期权交易涨跌幅限制会随时调整吗? 涨跌幅…...

阿里面试: RocketMQ如何实现每秒上十万QPS的超高吞吐量读取的?
这玩意儿表面看上去挺牛逼,但其实背后的逻辑和套路,在咱们开发里见过的那些招数,都能找到影子。 今天小北和大家一起系统化的梳理梳理一遍,让大家功力猛增,吊打面试官。 1. 消息存储:巧妙利用顺序写 先说…...

web:js原型污染简单解释
1. 什么是对象? 在 JavaScript 中,对象是一种包含属性和方法的数据结构。你可以把对象想象成一个存储键值对的容器。每个键(key)都有一个对应的值(value),这个值可以是数据或者函数。 let per…...

【C++打怪之路Lv7】-- 模板初阶
🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82)&#…...

实战OpenCV之模板匹配
基础入门 模板匹配是计算机视觉中一种常用的图像处理技术,用于在较大的目标图像中寻找与给定模板图像相似的子区域。这项技术的基本思想是在主图像中寻找与模板图像最相似的子区域,广泛应用于目标检测、图像识别等领域。模板匹配的主要流程包括如下三点。 1、滑动窗口。将模板…...

【C++ 11】for 基于范围的循环
文章目录 【 1. 基本用法 】【 2. for 新格式的应用 】2.1 for 遍历字符串2.2 for 遍历列表2.3 for 遍历的同时修改元素 问题背景 C 11标准之前(C 98/03 标准),如果要用 for 循环语句遍历一个数组或者容器,只能套用如下结构&#…...

创建索引时需要考虑的关键问题详解
引言 在数据库中,索引是加快数据查询速度的重要工具。通过索引,数据库可以快速定位需要的数据,而无需扫描整个表的数据。尽管索引能极大提高查询效率,但不合理的索引设计也可能导致性能下降,甚至增加不必要的系统开销…...

【JavaEE】【多线程】Thread类讲解
目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用…...

硬件面试(一)
网上别人的硬件面试记录,察漏补缺: 1.骄傲容易被打脸! 励磁电感和谐振电感的比值K大小有什么含义: 励磁电感和谐振电感的比值 KKK 通常用来衡量电路的特性。当 KKK 较大时,表示励磁电感相对于谐振电感较强,可能导致…...

9-贪心算法
PDF文档下载:LeetCode-贪心算法-java 参考:代码随想录 题目分类大纲如下: 贪心算法理论基础 什么是贪心? 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心的套路(什么时候用贪心ÿ…...

前端编程艺术(3)---JavaScript
目录 1.JavaScript 1.输出 2.变量和数据类型 3.运算符 4.数组 5.函数 6.面向对象 7.ES6面向对象 2.BOM 1.document对象 3.DOM 4.JSON 1.JavaScript JavaScript是一种脚本编程语言,通常用于为网页增加交互性和动态效果。它是一种高级语言ÿ…...

动态规划算法题目练习——91.解码方法
1.题目解析 题目来源:91.解码方法——力扣 测试用例 2.算法原理 基础版本 1.状态表示 由于题目只要求返回第i个位置的可能情况,则只需要开辟n(ns.size())个大小的dp表即可 2.状态转移方程 题目可知第i个位置可以单独解码也可以与前一个位置组合解码&am…...

每天一个数据分析题(四百九十二)- 主成分分析与因子分析
在因子分析中,因子载荷矩阵是用来表示( )。 A. 变量和因子之间的关系 B. 样本和因子之间的关系 C. 变量和样本之间的关系 D. 因子和因子之间的关系 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案…...

Linux shell编程学习笔记86:sensors命令——硬件体温计
0 引言 同事们使用的Windows系统电脑,经常莫名其妙地装上了鲁大师,鲁大师的一项功能是显示系统cpu等硬件的温度。 在Linux系统中,sensors命令可以提供类似的功能。 1 sensors命令 的安装和配置 1.1 sensors命令 的安装 要使用sensors命…...