自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 matlab之Stateflow入门基础

文章目录一、状态1.状态的层次结构2.状态的横向结构3.状态标签1)状态名2)状态动作一、状态1.状态的层次结构分为父状态和子状态每一个状态都有父状态,最外围的状态其父状态是它本身外部的state叫父状态,内部的状态叫子状态2.状态的横向结构状态图的顶层或某一父状态下,通常并存多个状态,他们之间的关系分为互斥和并行互斥状态互斥状态的矩形框边缘显示为实线,同一级的互斥状态,至多允许激活一个状态。并行状态并行状态的举行框边缘显示为虚线,同一级的并行状态可在同一时刻被激活3.状态标

2021-05-10 11:45:13 3522

原创 计算机常识知识点

文章目录1.堆和栈的区别进程间和线程1.堆和栈的区别1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 -

2020-07-28 17:50:21 273

原创 flutter之入门学习经验

文章目录一、Widget、Element、StateFlutter Widget采用现代响应式框架构建,这是从 React 中获得的灵感,中心思想是用widget构建你的UI。Widget描述了他们的视图在给定其当前配置和状态时应该看起来像什么。当widget的状态发生变化时,widget会重新构建UI,Flutter会对比前后变化的不同, 以确定底层渲染树从一个状态转换到下一个状态所需的最小更改(译者语:类似于React/Vue中虚拟DOM的diff算法)。runApp函数接受给定的Widget并使

2020-07-25 22:52:40 267

原创 Dart之异步编程和future对象

文章目录重中之重异步编程1.事件循环体系1.1.Event-Looper1.2.单线程模型1.3.Dart的消息循环和消息队列(重中之重)1.4.通过链接方式指定任务顺序1.5Dart 的事件循环Future类**错误处理**Isolate(隔离) 协程代码演示:spawnUri和spawn(更常用)Flutter中创建Isolate使用场景重中之重注:如果async函数没有明确指定返回值,返回的null值的Future比如函数是打印 而不是return;async 不是并行执行,它是遵循Dart

2020-07-25 21:44:10 637

原创 Dart之库 语言特性

库导入标准库import 'dart:math';也可以用相对路径或绝对路径来引用dart文件import 'lib/student/student.dart';指定package:前缀,表示导入包管理系统中的库import 'package:utils/utils.dart';导入库时,可以使用as关键字来给库起别名,避免命名空间冲突。就是当两个库中都有同一个类型,使用的时候会命名冲突比如下面的两个element类,两个库都有,所以将第二个库用as 起别名import 'pac

2020-07-25 08:47:16 122

原创 Dart之异常处理

try { // 使除数为0 print(11~/0); } on IntegerDivisionByZeroException { print("除数为0"); }on Exception{ print("Exception"); }finally { print("finally"); }不关心具体异常,只想捕获,避免异常继续传递finally是无论是否碰到异常情况都要执行try { print(11~/0)

2020-07-25 08:17:15 349

原创 Dart之类

文章目录1.定义一个类2.命名构造方法3.可以通过实现 getters 和 setters 来创建附加属性1.定义一个类注意 和C++不一样的是 类的{}后面不用加分号“;”class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; }}简化后可写成class Person { String name;

2020-07-24 12:15:16 131

原创 Dart之闭包

闭包是一个方法(对象)闭包定义在其他方法内部闭包能够访问外部方法内的局部变量,并持有其状态(这是闭包最大的作用,可以通过闭包的方式,将其暴露出去,提供给外部访问)内部指的是当前main或者是当前的执行函数,而外部指的是要调用的函数获取闭包,实际上就是调用一个外部函数让外部函数返回一个函数赋值给内部一个变量,可以通过这个变量来访问外部函数的已经执行完超出作用域的变量// 内部可以访问外部方法内的局部变量 countvoid main() { // 获取闭包 var func = a(.

2020-07-24 10:06:23 1028

原创 Dart之函数

文章目录可选参数(函数形参)命名可选参数位置可选参数匿名函数通过变量赋值自执行函数可选参数(函数形参)命名可选参数:用 { } 来指定,@required标注不想被忽略位置可选参数:用 [ ] 来指定命名可选参数与位置可选参数的区别,前者中的参数与顺序无关,无需按顺序传参,且传参数时需使用冒号;后者与顺序相关,传参必须依照顺序命名可选参数void main() { hello(name: 'Tom');}void hello({@required String name='Jack',

2020-07-24 09:52:33 138

原创 面试会问的问题

文章目录1. 什么是序列化和反序列化2.什么是进程,线程,协程1. 什么是序列化和反序列化序列化,就是把内存里“活的对象”转换成静止的字节序列,便于存储和网络传输;而反序列化则是反向操作,从静止的字节序列重新构建出内存里可用的对象。2.什么是进程,线程,协程进程:是操作系统资源分配的基本单位,是指在系统中正在运行的一个应用程序线程:是操作系统调度的基本单位(可执行的基本单位)是进程的基本执行单元,一个进程的所有任务都在线程中执行协程:是微线程,存在于线程中,是比线程更小的可执行单元进程和进程

2020-07-24 07:41:27 89

原创 算法之动态规划

文章目录求解动态规划的核心问题是穷举重叠子问题、最优子结构、状态转移方程就是动态规划三要素如何写出状态转移方程明确 base case -> 明确「状态」-> 明确「选择」 -> 定义 dp 数组/函数的含义。...

2020-07-24 07:40:31 77

原创 C++标准库之set

怎样在set中放入自定义类型?这个问题通过谷歌就可以得到不少答案:定义一个函数对象并在定义set的时候将其作为第二个模板参数。为自定义类型定义<运算符。

2020-07-24 07:39:54 158

原创 leetcode之1144. 递减元素使数组呈锯齿状

文章目录题目题解代码题目给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1。如果符合下列情况之一,则数组 A 就是 锯齿数组:每个偶数索引对应的元素都大于相邻的元素,即 A[0] > A[1] < A[2] > A[3] < A[4] > …或者,每个奇数索引对应的元素都大于相邻的元素,即 A[0] < A[1] > A[2] < A[3] > A[4] < …返回将数组 nums 转换为锯齿数组所需的最

2020-07-17 09:59:50 167

原创 C++之vector为什么在多维上比多维的数组读写效率慢很多

慢的原因是数据存储的局部性问题(data locality):使用二位数组Depart[500][21]的时候,所有数据在内存中是连续存放的。访问内存时,内存访问的局部性较强,Cache命中的概率较大。L1 Cache访问延迟只有几个指令周期,而内存访问延迟则达到几百个指令周期。2)Vector中的数据是连续存放的,**但是Vector本身只保存指向数据块的指针。Vector建立在栈上,保存数据的数据块在堆上。因此二位动态数组Vector <Vector>中,指向行的所有指针是连续存放的

2020-07-16 12:57:58 1041

原创 leetcode之1139最大的以 1 为边界的正方形

文章目录题解代码给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。示例 1:输入:grid = [[1,1,1],[1,0,1],[1,1,1]]输出:9示例 2:输入:grid = [[1,1,0,0]]输出:1提示:1 <= grid.length <= 1001 <= grid[0].length <= 100grid[i][j] 为 0 或 1题

2020-07-16 12:54:48 171

原创 leetcode之1343大小为 K 且平均值大于等于阈值的子数组数目

文章目录题目题解代码题目给你一个整数数组 arr 和两个整数 k 和 threshold 。请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。示例 1:输入:arr = [2,2,2,2,5,5,5,8], k = 3, threshold = 4输出:3解释:子数组 [2,5,5],[5,5,5] 和 [5,5,8] 的平均值分别为 4,5 和 6 。其他长度为 3 的子数组的平均值都小于 4 (threshold 的值)。示例 2:输入:arr = [1,1,1,

2020-07-16 07:09:25 133

原创 flutter之Dio库

文章目录Dio.get(url)Dio.post(url)在pubspec.yaml引入包打开pubspec.yaml文件//先说下dependencies:生产的时候的插件使用的,所以我们在这个下面添加dio: ^2.0.9 //注意有空格//**dev_dependencies:**是开发人员使用的插件都在这个下面,不会再生产时使用Dio.get(url)//异步操作返回类型是futureFuture getHttp(String TypeText) async{ try{

2020-07-15 08:27:05 462

原创 leetcode之96.不同的二叉搜索树

文章目录题解代码给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1

2020-07-12 19:02:13 84

原创 算法之动态规划流程

文章目录写动态规划,先想暴力递归尝试,然后避免重复计算进行优化,所以当没有重复计算的时候很难改成动态规划,避免重复计算 我们要找那些值是不被依赖的,找到固定状态,用空间换时间,记录下来 不要重复计算。分析可变参数,哪几个可变参数的值能代表返回状态,几个可变参数,就构造几维表。然后去看basecase确定表中固定不变的值,再看位置依赖写出动态规划(看你是怎么调动递归的)...

2020-07-12 18:17:14 123

原创 leetcode之面试题16.04.井字游戏

文章目录题目思路代码设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" “)中。第一个玩家总是放字符"O”,且第二个玩家总是放字符"X"。"X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。当所有位置非空时,也算为游戏结束。如果游戏结束,玩家不允许再放置字符

2020-07-12 10:33:24 308

原创 leetcode之1480

文章目录解题思路代码1480. 一维数组的动态和给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1,

2020-07-11 16:14:18 118

转载 C++之python和Lua脚本语言

文章目录PythonLuaC++ 高效、灵活,但开发周期长、成本高,在混合系统里可以辅助其他语言,编写各种底层模块提供扩展功能,从而扬长避短;pybind11 是一个优秀的 C++/Python 绑定库,只需要写很简单的代码,就能够把函数、类等 C++ 要素导入 Python;Lua 是另一种小巧快速的脚本语言,它的兼容项目 LuaJIT 速度更快;使用 LuaBridge 可以导出 C++ 的函数、类,但直接用 LuaJIT 的 ffi 库更好;使用 LuaBridge 也可以很容易地执行 L

2020-07-10 18:53:12 1370

转载 C++之socket

文章目录libcurl:高可移植、功能丰富的通信库cpr:更现代、更易用的通信库ZMQ:高效、快速、多功能的通信库libcurl 是一个功能完善、稳定可靠的应用层通信库,最常用的就是 HTTP 协议;cpr 是对 libcurl 的 C++ 封装,接口简单易用;libcurl 和 cpr 都只能作为客户端来使用,不能编写服务器端应用;ZMQ 是一个高级的网络通信库,支持多种通信模式,可以把消息队列功能直接嵌入应用程序,搭建出高效、灵活、免管理的分布式系统。我们知道了数据或者对象的序列化,现在,

2020-07-10 18:24:26 1191

原创 C++之序列化

文章目录序列化和反序列化JSONMessagePackProtoBuffer小结:JSON 是纯文本,容易阅读,方便编辑,适用性最广;MessagePack 是二进制,小巧高效,在开源界接受程度比较高;ProtoBuffer 是工业级的数据格式,注重安全和性能,多用在大公司的商业产品里。序列化和反序列化序列化,就是把内存里“活的对象”转换成静止的字节序列,便于存储和网络传输;而反序列化则是反向操作,从静止的字节序列重新构建出内存里可用的对象。接下来,我就和你介绍三种既简单又高效的数据

2020-07-10 17:37:17 3371 1

转载 C++之多线程和并发

文章目录什么是并发,多线程?认识线程和多线程什么是并发,多线程?通俗地说,“并发”是指在一个时间段里有多个操作在同时进行,与“多线程”并不是一回事。并发有很多种实现方式,而多线程只是其中最常用的一种手段。不过,因为多线程已经有了很多年的实际应用,也有很多研究成果、应用模式和成熟的软硬件支持,所以,对这两者的区分一般也不太严格,下面我主要来谈多线程。认识线程和多线程要掌握多线程,就要先了解线程(thread)。线程的概念可以分成好几个层次,从 CPU、操作系统等不同的角度看,它的定义也不同。今天,

2020-07-10 14:20:43 1099

转载 C++之C++算法

文章目录认识迭代器手写循环的替代品排序算法查找算法算法是专门操作容器的函数,是一种“智能 for 循环”,它的最佳搭档是 lambda 表达式;算法通过迭代器来间接操作容器,使用两个端点指定操作范围,迭代器决定了算法的能力;for_each 算法是 for 的替代品,以函数式编程替代了面向过程编程;有多种排序算法,最基本的是 sort,但应该根据实际情况选择其他更合适的算法,避免浪费;在已序容器上可以执行二分查找,应该使用的算法是 lower_bound;list/set/map 提供了等价的

2020-07-09 19:34:54 712

原创 C++之容器

文章目录容器的通用特性容器的具体特性顺序容器按照存储结构,这 5 种容器又可以再细分成两组。优缺点有序容器无序容器重点:容器其实就是一种数据结构;用来存储数据的容器,其实就是 C++ 对数据结构的抽象和封装。标准容器可以分为三大类,即顺序容器、有序容器和无序容器;所有容器中最优先选择的应该是 array 和 vector,它们的速度最快,开销最低;list 是链表结构,插入删除的效率高,但查找效率低;有序容器是红黑树结构,对 key 自动排序,查找效率高,但有插入成本;无序容器是散列表结构,

2020-07-09 18:27:03 925 1

原创 C++之string

文章目录原始字符串字符串转换函数正则表达式简单小结一下今天的内容:C++ 支持多种字符类型,常用的 string 其实是模板类 basic_string 的特化形式;目前 C++ 对 Unicode 的支持还不太完善,建议尽量避开国际化和编码转化,不要“自讨苦吃”;应当把 string 视为一个完整的字符串来操作,不要把它当成容器来使用;字面量后缀“s”表示字符串类,可以用来自动推导出 string 类型;原始字符串不会转义,是字符串的原始形态,适合在代码里写复杂的文本;处理文本应当使用正则

2020-07-09 11:13:11 85

原创 c++之lambda函数式编程

文章目录认识 lambda使用Lambda函数的好处使用 lambda 的注意事项2.lambda 的变量捕获3.泛型的 lambda关键词:闭包;总结:形式 auto f1 = [](){}; // 相当于空函数,什么也不做可以匿名使用vector<int> v = {3, 1, 8, 5, 0}; // 标准容器cout << *find_if(begin(v), end(v), // 标准库里的查找算法 [](int x)

2020-07-09 10:12:44 411

转载 C++之异常处理(如何利用异常)

文章目录为什么要有异常?异常的用法和使用方式为什么要有异常?归根到底,异常只是 C++ 为了处理错误而提出的一种解决方案,当然也不会是唯一的一种。在 C++ 之前,处理异常的基本手段是“错误码”。函数执行后,需要检查返回值或者全局的 errno,看是否正常,如果出错了,就执行另外一段代码处理错误:int n = read_data(fd, ...); // 读取数据if (n == 0) { ... // 返回值不太对,适当处理}if (e

2020-07-09 09:22:22 416

原创 C++之智能指针 unique_ptr 和 shared_ptr

文章目录一、unique_ptrC++指针没有只能算是一个小垃圾回收站,因为java,go都有一个专门的垃圾回收机制,无用指针会直接回收,C++只能通过析构函数等自己写,释放无用指针,累。智能指针就是代替你来干这些“脏活累活”的。它完全实践了 RAII,包装了裸指针,而且因为重载了 * 和 -> 操作符,用起来和原始指针一模一样。不仅如此,它还综合考虑了很多现实的应用场景,能够自动适应各种复杂的情况,防止误用指针导致的隐患,非常“聪明”,所以被称为“智能指针”。常用的有两种智能指针,分别是 u

2020-07-08 21:05:53 553

原创 C++之引用&

文章目录C++ 引用引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。C++ 引用 vs 指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。...

2020-07-08 19:53:49 66

原创 C++之const和volatile

文章目录一、constconst基本用法与类相关的 const 用法关键字 mutable在看const的内容之前 大家要记住一件事,我总结所有的形式,那就是const离谁最近,它是针对谁的。比如const int * p = &name;那么它针对的就是int,所以*p = 10;就是错误操作而 p = &class;就是正确操作而int* const p = &name;它针对的就是p ;所以 p = &name就是错误操作;而 *p = 10就是正确操作

2020-07-08 19:34:04 747 1

原创 C++之unordered_map使用从浅入深

文章目录一、简介二、插入(添加)键值对三、取值四、判空五、容量六、删除七、清空八、交换九、顺序比较十、查找十一、迭代器十二、遍历一、简介unordered_map是一种无序映射,key值是无序的,内部结构使用的是哈希表,存储的是<key, value>键值对,每次存储的都是一对一对的,而在查询的时候 只能通过key是否存在进行查找,不能同过value的值进行查找unordered_map内部是用哈希表实现,通过特殊的函数把Key值映射到哈希表中的一个位置来访问记录,查找时间复杂度可达到O(

2020-07-07 13:56:18 1674

转载 c++中vector动态数组用法

文章目录一、定义及初始化二、赋值(assign)三、获取长度(size)四、改变大小(resize)五、数组访问六、添加元素(push_back、insert)七、删除元素(pop_back、erase、remove)八、交换和反转(swap、reverse)九、排序(sort)十、清除和空判断(clear、empty)本文以int类型为例,其他类型大同小异使用vector数组时,需包含< vector>头文件同一功能中的不同函数独立编程,即调用后一函数时前一函数运行结果复原。(已用空行隔

2020-05-27 10:12:01 954

原创 算法之选择排序

简单来说,选择排序就是你在每次执行某次选择循环的时候,先从未排序的部分选出一个最大(或者最小的数),当有比它大(或者比它小)的数就进行替换,然后按照你的要求是升序还是降序,然后和未排序的首元素进行交换**(记住一定是交换位置,如果你直接放置的话,会导致原来数组的元素缺失)**那么选择排序稳定吗?答案是不稳定。为什么?比如 5,8,5,2,9 这样一组数据,使用选择排序算法来排序的话,第一次找到最小元素 2,与第一个 5 交换位置,那第一个 5 和中间的 5 顺序就变了,所以就不稳定了。正是因此,相对于冒

2020-05-23 16:51:51 77

原创 算法之插入排序

首先,我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。如图所示,要排序的数据是 4,5,6,1,3,2,其中左侧为已排序区间,右侧是未排序区间。代码如下:#include <iostream>#include <vector>using namespac

2020-05-23 09:21:13 97

原创 算法之冒泡排序

冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。冒泡排序要注意的点有两个:1.他是可以一种可以稳定排序的算法(稳定排序就是,多个值相同时,每个值得相对位置不变)2.要比书本上多加一个变量,用于判断某次冒泡操作是否数据移动,当没有数据移动时就不用在继续了,因为已经排好序了。减少没必要的操作。C++代码如下:#include <io

2020-05-23 00:46:43 132

原创 算法之递归算法

一、什么是递归?1.递归是一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序二叉树遍历等都是使用递归。2.方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。3.基本上,所有的递归问题都可以用递推公式来表示,比如f(n) = f(n-1) + 1;f(n) = f(n-1) + f(n-2);f(n)=n*f(n-1);二、为什么使用递归?递归的优缺点?1.优点:代码的表达力很强,写起来简洁。2.缺点:空间复杂度高、有堆栈溢出风险、存在重复计算

2020-05-21 17:35:43 563

原创 LeetCode54题之转圈打印矩阵

#include <iostream>#include <vector>using namespace std;/*row是行,column是列,缩写为r和c,(upr,upc)是左上角的边界点,(dr,dc)是右下角的边界点*/void CoutMatrix(vector<vector<int>> matrix, int upr, int upc, int dr, int dc){ if( upr == dr){ for(i

2020-05-21 13:47:36 179

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除