flutter基础 --dart语法学习
由于想要写一款性能较好,但是又可以一套代码多个平台运行的客户端app,所以选择了flutter 就去看了官方文档,大体发现flutter使用的dart语言和java和js差不多,感觉就是缝合怪。
Dart 是一种面向对象的编程语言,语法上与 Java、JavaScript 等语言有一些相似之处,因此对于有 Java 基础的开发者,Dart 的语法应该相对容易理解。以下是 Dart 语言的语法介绍,特别对比了与 Java 的异同。
看完由遗忘很正常 ,必要时可以查看官方中文文档
https://dart.cn/language/
1. 基本语法
1.1 变量声明
Dart 是强类型语言,但可以通过 var
来声明类型推断的变量。
- Dart:
int age = 30; // 明确类型
var name = 'John'; // 自动推断为 String
- Java:
int age = 30; // 明确类型
String name = "John"; // 明确类型
Dart 中 var
类似于 Java 的局部类型推断 var
(自 Java 10 引入)。
1.2 常量
Dart 中使用 const
和 final
来声明常量。const
是编译时常量,而 final
是运行时常量,赋值后不能修改。
- Dart:
const double pi = 3.14; // 编译时常量
final currentTime = DateTime.now(); // 运行时常量
- Java:
final double PI = 3.14; // Java 没有 const,但 final 可以限制变量不可修改
如果不显示定义 编译时会自动推断
var b="奥萨苏";
1.3 函数定义
Dart 中的函数定义与 Java 类似,但 Dart 的函数可以是顶级函数,不需要类的包装。
- Dart:
int add(int a, int b) {return a + b;
}// 简写方式(箭头函数)
int subtract(int a, int b) => a - b;
- Java:
public int add(int a, int b) {return a + b;
}
Dart 的函数可以直接返回表达式,使用 =>
箭头函数表示法。
如果不显示定义返回值 则是dynamic类型
void main() {int a=12 ;print('你好世界');print(a++);String name ="jack";print("开发者的名字是=$name"); //输出的时候的引用// 双引号嵌套单引号// 单引号嵌套双引号print("他就是世界第一的'火影大王'");print('他就是世界第一的"火影大王"');var b="奥萨苏";print(b);add(1,2);}
add (int a,int b){return a+b;
}
2. 控制流
2.1 条件语句
Dart 的 if-else
语法与 Java 完全一致。
- Dart:
if (age > 18) {print('Adult');
} else {print('Minor');
}
- Java:
if (age > 18) {System.out.println("Adult");
} else {System.out.println("Minor");
}
2.2 循环
Dart 的循环控制结构与 Java 非常相似,for
、while
、do-while
循环的语法基本一致。
- Dart:
for (int i = 0; i < 5; i++) {print(i);
}int i = 0;
while (i < 5) {print(i);i++;
}
- Java:
for (int i = 0; i < 5; i++) {System.out.println(i);
}int i = 0;
while (i < 5) {System.out.println(i);i++;
}
2.3 switch-case
Dart 的 switch-case
语法与 Java 类似,但 case
不需要 break
,也没有 fall-through
行为。
- Dart:
var grade = 'A';switch (grade) {case 'A':print('Excellent');break;case 'B':print('Good');break;default:print('Unknown grade');
}
- Java:
char grade = 'A';switch (grade) {case 'A':System.out.println("Excellent");break;case 'B':System.out.println("Good");break;default:System.out.println("Unknown grade");
}
3. 面向对象编程
3.1 类和对象
Dart 是面向对象语言,所有东西都是对象,类的定义方式与 Java 类似。
- Dart:
class Person {String name;int age;// 构造函数Person(this.name, this.age);void greet() {print('Hello, my name is $name');}
}void main() {var person = Person('Alice', 30);person.greet();
}
- Java:
class Person {String name;int age;// 构造函数public Person(String name, int age) {this.name = name;this.age = age;}public void greet() {System.out.println("Hello, my name is " + name);}
}public static void main(String[] args) {Person person = new Person("Alice", 30);person.greet();
}
3.2 继承
Dart 支持单继承,使用 extends
关键字。
- Dart:
class Employee extends Person {String jobTitle;Employee(String name, int age, this.jobTitle) : super(name, age);@overridevoid greet() {print('Hello, I am $name, and I work as a $jobTitle');}
}
- Java:
class Employee extends Person {String jobTitle;public Employee(String name, int age, String jobTitle) {super(name, age);this.jobTitle = jobTitle;}@Overridepublic void greet() {System.out.println("Hello, I am " + name + ", and I work as a " + jobTitle);}
}
3.3 接口和抽象类
Dart 没有显式的 interface
关键字,但所有类都可以作为接口被实现。使用 abstract
关键字定义抽象类。
- Dart:
abstract class Animal {void sound(); // 抽象方法
}
//作为接口被实现class Dog implements Animal{@overridevoid sound() {print('Woof');}
}//但是接口没有有办法在父类申明数值
abstract class Animal {late String name;Animal(this.name); // 抽象方法void sound();}
//使用implents 就会报错
class Dog extends Animal{Dog(String name):super(name); @overridevoid sound() {print('Woof');}}
- Java:
abstract class Animal {abstract void sound();
}class Dog extends Animal {@Overridevoid sound() {System.out.println("Woof");}
}
演示代码
这里dart 利用的是重写来实现继承和实现的逻辑
class Person {String name;int age;// 构造函数Person(this.name, this.age);void greet() {print('Hello, my name is $name');}
}void main() {// 多态 父类对象 申明位子类对象Person person = Employee('网名', 30,"日报记者");person.greet();Iservice service=ServiceImple("jack");service.sayhello();
}
class Employee extends Person {String jobTitle;//调用父类的构造函数 和本类的构造函数Employee(String name, int age, this.jobTitle) : super(name, age);@overridevoid greet() {print('Hello, I am $name, and I work as a $jobTitle');}
}abstract class Iservice {late String name; // 抽象类中的变量Iservice(this.name);void sayhello(){print("接口说你好");}int Add(int a, int b);
}class ServiceImple extends Iservice {ServiceImple(String name):super(name);/*** 实现父类空方法*/@overrideint Add(int a, int b) {return a + b; // 实现加法}/*** 对父类重写 增强*/@overridevoid sayhello() {super.sayhello();print('Hello, my name is $name'); // 使用 name}
}
4. 异步编程
4.1 异步函数
Dart 有内置的 async
和 await
关键字,用于处理异步编程,这与 JavaScript 中的异步编程类似。
-
Dart:
感觉跟js的很想
Future<void> fetchData() async {var data = await fetchFromServer();print(data);
}Future<String> fetchFromServer() {// 模拟从服务器获取数据 俩秒后返回数据return Future.delayed(Duration(seconds: 2), () => 'Server data');
}
//冒泡排序
main() {fetchData();
}
- Java 中没有
async
和await
,你可以通过CompletableFuture
或其他异步库实现异步操作:
import java.util.concurrent.CompletableFuture;public class AsyncExample {public static void main(String[] args) {fetchData();}public static void fetchData() {CompletableFuture.supplyAsync(() -> fetchFromServer()).thenAccept(data -> System.out.println(data));}public static String fetchFromServer() {try {Thread.sleep(2000); // 模拟耗时操作} catch (InterruptedException e) {e.printStackTrace();}return "Server data";}
}
4.2 Stream
Dart 中的 Stream
类似于 Java 的 Stream
,但它更侧重于处理异步事件流。
- Dart:
Stream<int> countStream(int to) async* {for (int i = 1; i <= to; i++) {yield i;}
}void main() async {await for (var value in countStream(5)) {print(value); // 依次输出 1 到 5}
}
- Java 中的
Stream
主要用于集合的函数式操作,而异步流处理可以使用RxJava
或Project Reactor
。
5. 其他重要特性
5.1 集合操作
Dart 中的集合与 Java 类似,包括 List
、Set
、Map
等。
api和java差不多
- Dart:
List<int> numbers = [1, 2, 3];
Map<String, int> ages = {'Alice': 30, 'Bob': 25};numbers.forEach(print);
- Java:
List<Integer> numbers = Arrays.asList(1, 2, 3);
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
ages.put("Bob", 25);numbers.forEach(System.out::println);
Dart 语言中的集合操作非常丰富,类似于 Java 的集合框架,但也有其独特之处。Dart 提供了常用的集合类型(如 List
、Set
和 Map
),并提供了大量的 API 来操作集合。以下是 Dart 集合操作和 API 的详解:
1. List(列表)
List
是 Dart 中的可变数组,类似于 Java 中的 ArrayList
。它可以存储有序的元素,并且允许重复元素。
创建列表
-
空列表:
var list = <int>[]; // 创建空的整数列表
-
带初始值的列表:
var list = [1, 2, 3, 4]; // 初始化列表
-
不可变列表:
var fixedList = List.unmodifiable([1, 2, 3]); // 创建不可修改的列表
常用 API
-
添加元素:
list.add(5); // 添加单个元素 list.addAll([6, 7]); // 添加多个元素
-
插入元素:
list.insert(0, 0); // 在索引 0 处插入 0 list.insertAll(1, [8, 9]); // 在索引 1 处插入多个元素
-
删除元素:
list.remove(1); // 删除第一个值为 1 的元素 list.removeAt(0); // 删除索引为 0 的元素 list.removeWhere((item) => item % 2 == 0); // 删除所有符合条件的元素
-
查找元素:
var containsTwo = list.contains(2); // 检查列表是否包含某个元素 var indexOfThree = list.indexOf(3); // 查找元素的位置
-
排序:
list.sort(); // 升序排序 list.sort((a, b) => b.compareTo(a)); // 降序排序
-
遍历:
list.forEach((item) => print(item)); // 遍历列表并打印每个元素
-
映射和过滤:
var squaredList = list.map((item) => item * item).toList(); // 对每个元素平方并返回新列表 var evenList = list.where((item) => item.isEven).toList(); // 筛选偶数
-
其他常用操作:
list.clear(); // 清空列表 var isEmpty = list.isEmpty; // 检查是否为空 var length = list.length; // 获取长度
2. Set(集合)
Set
是一个无序且元素唯一的集合,类似于 Java 的 HashSet
。
创建集合
-
空集合:
var set = <int>{}; // 创建空的整数集合
-
带初始值的集合:
var set = {1, 2, 3, 4}; // 初始化集合
常用 API
-
添加元素:
set.add(5); // 添加单个元素 set.addAll([6, 7]); // 添加多个元素
-
删除元素:
set.remove(1); // 删除元素 1 set.removeWhere((item) => item.isEven); // 删除符合条件的元素
-
集合操作:
var unionSet = set.union({5, 6}); // 并集 var intersectionSet = set.intersection({3, 4, 5}); // 交集 var differenceSet = set.difference({3, 4}); // 差集
-
遍历:
set.forEach((item) => print(item)); // 遍历集合
-
其他常用操作:
var containsThree = set.contains(3); // 检查集合是否包含某个元素 var isEmpty = set.isEmpty; // 检查是否为空 var length = set.length; // 获取长度
3. Map(映射)
Map
是键值对的集合,类似于 Java 的 HashMap
。键必须是唯一的,值可以重复。
创建映射
-
空映射:
var map = <String, int>{}; // 创建空的键值对映射
-
带初始值的映射:
var map = {'one': 1, 'two': 2}; // 初始化映射
常用 API
-
添加或更新键值对:
map['three'] = 3; // 添加新键值对 map.update('two', (value) => value + 2); // 更新键 'two' 的值
-
删除键值对:
map.remove('one'); // 删除键 'one' 对应的键值对
-
查找值:
var value = map['two']; // 根据键获取值 var containsKey = map.containsKey('two'); // 检查是否包含某个键 var containsValue = map.containsValue(2); // 检查是否包含某个值
-
遍历:
map.forEach((key, value) => print('$key: $value')); // 遍历映射
-
获取键或值的集合:
var keys = map.keys; // 获取所有键 var values = map.values; // 获取所有值
-
其他常用操作:
var isEmpty = map.isEmpty; // 检查是否为空 var length = map.length; // 获取长度
5.2 异常处理
Dart 的异常处理与 Java 类似,使用 try-catch
。
- Dart:
try {var result = 10 ~/ 0; // 整数除法会抛出异常
} catch (e) {print('Caught an exception: $e');
} finally {print('This will always execute');
}
- Java:
try {int result = 10 / 0;
} catch (ArithmeticException e) {System.out.println("Caught an exception: " + e);
} finally {System.out.println("This will always execute");
}
5.3 空安全
Dart 支持空安全(null-safety),防止 null
引发错误,类似于 Java 的 Optional。
- Dart:
String? name; // 允许为 null
name = null;
print(name?.length); // 使用 ?. 操作符避免空指针异常
- Java:
Optional<String> name = Optional.ofNullable(null);
System.out.println(name.map(String::length).orElse(0));
枚举
dart 的枚举也和java类似
dart 需要强制编译时就申明构造函数不可变
enum HttpStatus {ok(200, "响应成功"),created(201, "创建成功"),badRequest(400, "请求错误"),unauthorized(401, "未授权"),notFound(404, "未找到"),internalServerError(500, "服务器内部错误");final int code;final String name;
//一申明即不可变const HttpStatus(this.code, this.name);
}
java
public enum Test {ok(200, "OK");final int code;final String message;Test(int code, String message) {this.code = code;this.message = message;}
}
补充
下面的内容都是用到啥 补充啥
初始化
构造函数后面跟 :代码块即可执行初始化 在构造函数之前执行
还有之前的构造函数调用父类方式本质也只是这种初始化的缩写
class Animal{String name;int age;Animal(this.name,this.age);
}
class Person extends Animal{String action;Person(String name,int age,this.action):super(name,age){print("构造函数被调用");super.age=age;super.name=name;}
}
可变参数搭配可空操作
void greet(String name, {String? greeting, String? farewell}) {if (greeting != null) {print('$greeting, $name!');} else {print('Hello, $name!');}if (farewell != null) {print('$farewell, $name!');}
}void main() {greet('Alice'); // 输出: Hello, Alice!greet('Bob', greeting: 'Hi'); // 输出: Hi, Bob!greet('Charlie', farewell: 'Goodbye'); // 输出: Hello, Charlie! Goodbye, Charlie!greet('David', greeting: 'Hey', farewell: 'See you'); // 输出: Hey, David! See you, David!
}
相关文章:

flutter基础 --dart语法学习
由于想要写一款性能较好,但是又可以一套代码多个平台运行的客户端app,所以选择了flutter 就去看了官方文档,大体发现flutter使用的dart语言和java和js差不多,感觉就是缝合怪。 Dart 是一种面向对象的编程语言,语法上与 Java、JavaScript 等语言有一些相似之处&…...

新手必看:一步步教你绑定常见邮箱到第三方应用(如何绑定QQ、163、Hotmail、Gmail等邮箱)
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 邮箱绑定 📒📫 QQ邮箱📫 163邮箱📫 Hotmail邮箱📫 Gmail邮箱📫 Yahoo邮箱📫 iCloud邮箱📫 其他邮箱⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾经为绑定第三方邮箱而感到困惑?你不是一个人!许多人在尝试将QQ邮…...

mac 怎么查看CPU核数
在 macOS 系统中,可以通过以下几种方法查看 CPU 核心数: 1. 使用“关于本机”查看 点击左上角的苹果图标()。选择“关于本机”。在弹出的窗口中,系统会显示 Mac 的基本信息,包括 CPU 的类型和核心数。比…...

Vue生命周期;Vue路由配置;vue网络请求;vue跨域处理
一,Vue生命周期 <template><div > <h1 click"changeText">{{ info }}</h1></div> </template><script> export default {name: HelloWorld,data(){return{info:"介绍组件生命周期"}},methods:{chang…...

汽车电子电气架构从12V提升至48V,带来那些好处? 包括那些改变?
标签: 汽车电子电气架构; 从12V提升至48V; 汽车电子电气架构从12V提升至48V,带来那些好处? 包括那些改变? 将传统汽车的电子电气架构电压从12V提升至48V,既有显著的优势,也需要对车…...

springboot实战学习笔记(2)
目录 1、手动创建springboot工程,选择Maven构建。 2、Maven生成的,可能需要再main目录下new一个resources目录,再在其下目录new一个配置文件。 3、 pom文件中让当前的工程继承父工程依赖:、删去无用依赖。 4、引入后端环境所需要的…...

Python练习宝典:Day 1 - 选择题 - 基础知识
目录 一、踏上Python之旅二、Python语言基础三、流程控制语句四、序列的应用 一、踏上Python之旅 1.想要输出 I Love Python,应该使用()函数。 A.printf() B.print() C.println() D.Print()2.Python安装成功的标志是在控制台(终端)输入python/python3后,命令提示符变为: A.&…...

macOS平台(intel)编译MAVSDK安卓平台SO库
1.下载MAVSDK: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译liblzma 修改CMakeLists.txt文件增加C与CXX指令-fPIC set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "-fPIC ${CMAKE_CXX_FLAGS}") 修改如下:…...

set的相关函数(3)
3.删除 //删除 /* int main() {set<int> s;s.insert({ 2,4,5,2,6,8,10,15 });for (auto e : s){cout << e << " ";}cout << endl;//删除最小的元素就删除排序后的首元素s.erase(s.begin());for (auto e : s){cout << e << "…...

Python MongoDB
MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。 MongoDB 数据库安装与介绍可以查看我们的 MongoDB 教程。 PyMongo Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接。 …...

安国U盘量产工具系列下载地址
来源地址(访问需要科学工具):AlcorMP (Последняя версия ALCOR U2 MP v23.08.07.00.H) – [USBDev.ru] 版本列表: AlcorMP(最新版本的 ALCOR U2 MP v23.08.07.00.H) AlcorMP是在Alcor Mic…...

2024年最新版Vue3学习笔记
本篇文章是记录来自尚硅谷禹神2023年课程的学习笔记,不得不说禹神讲的是真的超级棒! 文章目录 创建Vue3工程main.ts文件解析初始化项目写一个简单的效果 Vue3核心语法setup函数setup和选项式的区别setup语法糖指定组件名称 响应式数据ref函数定义基本类…...

FX5 CPU模块和以太网模块的以太网通信功能
FX5 CPU模块和以太网模块的以太网通信功能的概要如下所示。 CPU模块的内置以太网端口的通信规格如下所示。 1、与MELSOFT的直接连接 不使用集线器,用1根以太网电缆直接连接以太网搭载模块与工程工具(GX Torks3)。无需设定IP地址,仅连接目标指定即可进行…...

【结构型】树形结构的应用王者,组合模式
目录 一、组合模式1、组合模式是什么?2、组合模式的主要参与者: 二、优化案例:文件系统1、不使用组合模式2、通过组合模式优化上面代码优化点: 三、使用组合模式有哪些优势1、统一接口,简化客户端代码2、递归结构处理方…...

C++——求3*3矩阵对角元素之和。
没注释的源代码 #include <iostream> using namespace std; int main() { int a[3][3],i,j,sum0; cout<<"请输入a组中的元素:"<<endl; for(i0;i<2;i) { for(j0;j<2;j) { cin>>a[i][j]…...

nodejs基于vue电子产品商城销售网站的设计与实现 _bugfu
目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式,开发软件有很多种可以用,本次开发用到的软件是vscode,用到的数据库是…...

GO Ants 学习
文章目录 主要特性安装基本用法1. 创建协程池并提交任务2. 带返回值的任务提交3. 自定义协程池的参数4. 获取协程池状态 应用场景优势资源释放性能对比总结 ants 是一个高性能的 Go 语言协程池库,专注于有效地管理 Go 协程的数量。它通过复用协程减少了创建和销毁协…...

Scikit-learn (`sklearn`) 教程
Scikit-learn (sklearn) 教程 Scikit-learn 是 Python 中最流行的机器学习库之一,提供了丰富的机器学习算法、数据预处理工具以及模型评估方法,广泛应用于分类、回归、聚类和降维等任务。 在本教程中,我们将介绍如何使用 Scikit-learn 进行…...

【计网】从零开始掌握序列化 --- JSON实现协议 + 设计 传输\会话\应用 三层结构
唯有梦想才配让你不安, 唯有行动才能解除你的不安。 --- 卢思浩 --- 从零开始掌握序列化 1 知识回顾2 序列化与编写协议2.1 使用Json进行序列化2.2 编写协议 3 封装IOService4 应用层 --- 网络计算器5 总结 1 知识回顾 上一篇文章我们讲解了协议的本质是双方能够…...

Qt 模型视图(四):代理类QAbstractItemDelegate
文章目录 Qt 模型视图(四):代理类QAbstractItemDelegate1.基本概念1.1.使用现有代理1.2.一个简单的代理 2.提供编辑器3.向模型提交数据4.更新编辑器的几何图形5.编辑提示 Qt 模型视图(四):代理类QAbstractItemDelegate 模型/视图结构是一种将数据存储和界面展示分离的编程方…...

django+vue
1. diango 只能加载静态js,和flask一样 2. 关于如何利用vue创建web,请查看flask vue-CSDN博客 3. 安装django pip install django 4. 创建新项目 django-admin startproject myproject 5.django 中可以包含多个app 5.1 创建一个app cd myprojec…...

HCIA--实验十七:EASY IP的NAT实现
一、实验内容 1.需求/要求: 通过一台PC,一台交换机,两台路由器来成功实现内网访问外网。理解NAT的转换机制。 二、实验过程 1.拓扑图: 2.步骤: 1.PC1配置ip地址及网关: 2.AR1接口配置ip地址࿱…...

彻底解决:QSqlDatabase: QMYSQL driver not loaded
具体错误 QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMIMER QMARIADB QMYSQL QODBC QPSQL 检查驱动 根据不同安装目录而不同: D:\Qt\6.7.2\mingw_64\plugins\sqldrivers 编译驱动 如果没有,需要自行编译&…...

leetcode02——59. 螺旋矩阵 II、203. 移除链表元素
59. 螺旋矩阵 II class Solution {public int[][] generateMatrix(int n) {int[][] nums new int[n][n]; // 定义二维数组用于存储数据int startX 0; // 定义每循环一个圈的起始位置int startY 0;int loop 1; // 定义圈数,最少1圈int count 1; // 用来给矩阵中…...

Matlab Simulink 主时间步(major time step)、子时间步(minor time step)
高亮颜色说明:突出重点 个人觉得,:待核准个人观点是否有误 高亮颜色超链接 文章目录 对Simulink 时间步的理解Simulink 采样时间的类型Discrete Sample Times(离散采样时间)Controllable Sample Time(可控采样时间) Continuous Sample Times(…...

docker 升级步骤
Docker 升级的步骤通常取决于你所使用的操作系统。以下是针对常见操作系统(如 Ubuntu 和 CentOS)的 Docker 升级步骤: Ubuntu 更新现有的包索引: sudo apt-get update 升级 Docker: 您可以运行以下命令来升级 Docker…...

828华为云征文 | 云服务器Flexus X实例:one-api 部署,支持众多大模型
目录 一、one-api 介绍 二、部署 one-api 2.1 拉取镜像 2.2 部署 one-api 三、运行 one-api 3.1 添加规则 3.2 运行 one-api 四、添加大模型 API 4.1 添加大模型 API 五、总结 本文通过 Flexus云服务器X实例 部署 one-api。Flexus云服务器X实例是新一代面向中小企业…...

2024 SNERT 预备队招新 CTF 体验赛-Web
目录 1、robots 2、NOF12 3、get_post 4、好事慢磨 5、uploads 6、rce 7、ezsql 8、RCE 1、robots robots 协议又叫爬虫协议,访问 robots.txt 继续访问 /JAY.php 拿到 flag:flag{hello_Do_YOU_KONw_JAY!} 2、NOF12 F12 和右键都被禁用 方法&#…...

亲测全网10大“免费”论文降重神器!论文写作必备!
在当今学术研究和论文写作中,AI技术的应用已经变得越来越普遍。为了帮助学者们更高效地完成论文撰写任务,以下将详细介绍十款必备的论文写作工具,其中特别推荐千笔-AIPassPaper。 1. 千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和…...

二分算法——优选算法
个人主页:敲上瘾-CSDN博客 个人专栏:游戏、数据结构、c语言基础、c学习、算法 本章我们来学习的是二分查找算法,二分算法的应用非常广泛,不仅限于数组查找,还可以用于解决各种搜索问题、查找极值问题等。在数据结构和算…...