- 博客(121)
- 资源 (4)
- 收藏
- 关注
原创 OpenCV:04.inline、define和图像的形状绘制和卷积掩膜操作
inline、define和图像的形状绘制和卷积掩膜操作1. inline 和 define2.形状和文件绘制3.图像卷积和滤波操作3.1 图像矩阵掩膜操作 (可以过滤图像信息)1. inline 和 defineinline是内联函数,类似于 define 都可以做到编译时替换区别:define 并没有严格的检测,inline函数的参数有确切的类型所以会有严格的类型检测#define Max(a,b) a>b ? a :b // inline 内联函数,类似于 define 做到编译时替换
2020-11-04 15:38:20
335
原创 OpenCV:03.Mat对象和图像混合
Mat对象和图像混合1. mat 常见用法2. 图像操作3. 图像混合4.饱和度、亮度和对比度1. mat 常见用法Mat srcsrc.empty() 判断mat是否为空,搭配imread判断文件是否存在src.data 头指针,通过判断是否为 NULL 也能判断图片是否存在Mat的构造函数: // Mat的构造函数 // CV_8UC1 1个颜色的通道 (0-255) // CV_8UC2 2个颜色的通道 16位 RGB565 // CV_8UC3 3个颜色的通道 24位
2020-11-04 15:36:54
286
原创 OpenCV:02.android滤镜(不用opencv来写)
@TOC具体代码请看:NDKPractice项目的opencv49androidfiltereffects1. 使用ColorMatrix颜色矩阵: @Nullable public static Bitmap gray(@Nullable Bitmap src) { Bitmap dst = Bitmap.createBitmap(src.getWidth(),src.getHeight(),src.getConfig()); Canvas canv
2020-11-04 15:35:44
196
原创 OpenCV:01.安装和转灰度图提升饱和度
安装和转灰度图提升饱和度1. VS 安装、配置Opencv的环境c++ 中 uchar2. opencv方法介绍:3. 彩色图转灰度图及黑白图(手写)1. VS 安装、配置Opencv的环境我们是在 windows的VS中开发 使用功能的方式是:头文件+dll文件的方式来学习opencv的一些常见使用方法。下载 opencv.exe 并解压生成->配置管理器->平台修改为x64配置windows环境变量:path : opencv解压目录\build\x64\vc14\bin配置头
2020-11-04 15:33:57
312
原创 数据结构和算法:19.leetcode刷题-常用算法思想
leetcode刷题-常用算法思想1. 贪心算法思想2. 回溯算法思想3. 分治算法思想4. 动态规划算法思想1. 贪心算法思想每次都选择正确的最优的解,不断反复分发饼干-455摆动序列-3762. 回溯算法思想就是不断的试探,试探完就退回去重新选择,回溯 (都与递归有关系)子集-78子集2-903. 分治算法思想把 n 的问题分解成 K 个较小的子问题,这些问题是相互独立,求出子问题的解进行合并,就可以得到原问题的解 (归并排序,快速排序)计算右侧小于当前元素的个
2020-11-04 15:29:58
274
原创 数据结构和算法:18.leetcode刷题-数字和位运算、树
数字和位运算、树1. 数字篇2. 位运算3. 树1. 数字篇两数之和-1整数反转-72. 位运算两数相加-22的幂-2313的幂-326位1的个数-191阶乘后的零-1723. 树二叉树的中序遍历-94递归方式: void inorderTraversal(TreeNode* root, vector<int>* res){ if(root == NULL){ return;
2020-11-03 17:03:31
161
1
原创 数据结构和算法:17.图
图1. 图的基本概念:2. 基本术语:3. 图的存储结构3.1 无向边存储图如下:3.2 有向边存储图如下:3.3 邻接表3.4 十字链表4. 深度优先遍历和广度优先遍历5. 最小生成树和最短路径具体代码请看:NDKPractice项目的datastructure43graph1. 图的基本概念:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图就是由 点 和 边组成。注意:线性表中可以没有元素
2020-11-03 17:01:52
160
原创 数据结构和算法:16.ConcurrentHashMap分析
ConcurrentHashMap分析1. HashMap 5 个线程 put 数据会发生什么? (阿里面试第一面)2. Java 多线程的内存模型3. synchronized 的底层实现原理4. ConcurrentHashMap 源码分析1. HashMap 5 个线程 put 数据会发生什么? (阿里面试第一面)数据丢失,死循环 (扩容)解决方案:hashTableCollections.synchronizedMap()ConcurrentHashMap前两种是锁着整个方法,分
2020-11-03 16:58:13
173
原创 数据结构和算法:15.哈夫曼编码
哈夫曼编码1. 哈夫曼树定义:2. 如何构建一棵最优的哈夫曼树2.1 统计字符出现的个数2.2 构建赫夫曼树2.3. 前缀码2.4. 哈夫曼编码和解码实现具体代码请看:NDKPractice项目的datastructure42huffman定长编码: 1 字节 8 位代表一个字符 a变长编码: utf 哈夫曼编码1. 哈夫曼树定义:哈夫曼树(霍夫曼树):外国大学生发现的,主要用于压缩,变长的编码,最优的前缀码二叉树路径长度:根节点到该节点的边的条数 = 节点个数 - 1节点的权:
2020-11-03 16:54:37
378
原创 数据结构和算法:14.红黑树
红黑树1. 红黑树的定义:2. 新增逻辑:[3. 删除逻辑:](https://blog.csdn.net/a944750471/article/details/92384553)4.红黑树与 AVL 树的对比5. 总结6. 代码:具体代码请看:NDKPractice项目的datastructure40redblacktree1. 红黑树的定义:红黑树是一棵自平衡的二叉搜索树特性:每个节点或者是黑色,或者是红色。根节点是黑色。每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(N
2020-11-03 16:52:19
161
原创 数据结构和算法:13.AVL树
AVL树1. AVL树的定义:2.旋转操作2.1 左旋2.2 右旋2.3 先左旋再右旋2.4 先右旋再左旋3.移除4. 具体代码具体代码请看:NDKPractice项目的datastructure38avl1. AVL树的定义:定义:左右两个子树高度不超过1也称为平衡二叉搜索树,意义:普通二叉搜索树会出现极度不平衡的情况,复杂度有可能退化成O(n)平衡二叉搜索树可确保复杂度在O(logn)2.旋转操作[3,2,1,4,5,6,7,10,9,8]2.1 左旋2.2 右旋2.3 先
2020-11-03 16:50:28
179
原创 数据结构和算法:12.二叉搜索树
二叉搜索树1. 二叉搜索树的定义:2.删除3.代码具体代码请看:NDKPractice项目的datastructure37binarysearchtree1. 二叉搜索树的定义:定义:比它(当前根节点)小的放左边,比它(当前根节点)大的放右边普通二叉搜索树的中序遍历,就是从小到大的排序 (数据排序)2.删除当删除节点的左右两个子节点都不为 NULL 的情况下,从左边找最大值来替代,或者从右边找最小值3.代码template<class K, class V>struct Tre
2020-11-03 16:47:30
163
原创 数据结构和算法:11.二叉树序列化、优先级队列和堆排序
二叉树序列化、优先级队列和堆排序1. 二叉树的序列化和反序列化1.1 序列化1.2 反序列化2. 优先级队列3. 堆排序(升序采用大根堆,降序采用小根堆)具体代码请看:NDKPractice项目的datastructure36heapsorting1. 二叉树的序列化和反序列化1.1 序列化/** * 序列化 */void serializeTree(TreeNode<char> *pNode, string &str) { if(!pNode){
2020-11-03 09:41:06
418
原创 数据结构和算法:10.二叉树常见操作、平衡二叉树
二叉树常见操作、平衡二叉树1. 二叉树分类`完全二叉树`:`满二叉树`:1.1 常用的操作树:2. 二叉树的遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历2.4 层序遍历3. 根据`前序和中序遍历` 或 `后序和中序遍历`还原二叉树4. 二叉树的深度:5. 判断是否是平衡二叉树具体代码请看:NDKPractice项目的datastructure35binarytree1. 二叉树分类普通二叉树完全二叉树满二叉树完全二叉树:概念:叶结点只能出现在最底层的两层,且最底层叶结点均处于次底层
2020-11-03 09:36:37
212
原创 数据结构和算法:09.树、二叉树和森林
树、二叉树和森林1. 工作中的一个小例子:登录后自动跳转到目标页面2. 树的定义3. 树的名词解释4. 树的分类5. 树的操作(树的存储)5.1 孩子双亲表示法5.2 二叉树表示法(一般树、森林与二叉树之间互转)5.2.1一般树 转 二叉树5.2.2 二叉树 转 树5.2.3 森林转二叉树1. 工作中的一个小例子:登录后自动跳转到目标页面需求例子:跳转到直播页,首先跳转到登录页,登录成功之后再跳转到直播页比较好的解决方案,随着业务逻辑越来越复杂的情况下,不需要去刻意的去修改原来的代码解决办法:1、
2020-11-03 09:28:00
197
原创 数据结构和算法:08.HashMap 源码分析和手写
HashMap 源码分析和手写知识点:1. HashMap默认的一些参数:2. == 和 equals3. hashCode:4. HashMap 的长度为什么是 2 的幂次?5. 手写HashMap时关键代码分析:具体代码请看:JavaJniTest项目的datastructure33hashmap知识点:常见面试题:equals 和 == 的区别,hashCode 与它们之间的联系?HashMap 的长度为什么是 2 的幂次?五个线程同时往 HashMap 中 put 数据会发生什么?C
2020-11-02 17:21:00
135
原创 数据结构和算法:07.汉诺塔、数组实现队列和双向队列
汉诺塔、队列和双向队列知识点:1. 汉诺塔:2. 位运算知识:3. 手写队列:具体代码请看:NDKPractice项目的datastructure32queue知识点:1. 汉诺塔:如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数步骤:n-1个盘子借助 C 从 A 挪动到 B 上面直接把 n 盘子从 A 挪动到 Cn-1 个盘子借
2020-11-02 16:44:49
488
原创 数据结构和算法:06.递归和数组实现栈结构
递归和栈结构知识点:1. 递归和循环的区别:2. java 中的 stack(继承至 Vector)2. 数组实现栈结构3. 链表实现栈结构具体代码请看:NDKPractice项目的datastructure31recursionandstack知识点:1. 递归和循环的区别:循环: 高效一些,循环能解决的问题递归也能解决递归: 低效一些,递归能解决的问题循环不一定能解决2. java 中的 stack(继承至 Vector)vector :没指定大小的情况下,初始大小为 10,扩容为当
2020-11-02 15:01:55
139
原创 数据结构和算法:05.稳定和不稳定排序、归并排序和快速排序、三路快排
具体代码请看:NDKPractice项目的datastructure1. 稳定排序和不稳定排序:稳定排序概念:通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。代表:稳定排序:冒泡、插入、选择、归并不稳定排序:希尔、快速排序、堆排序2. 归并排序每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且
2020-10-30 17:39:52
4317
原创 数据结构和算法:04.冒泡优化、插入优化和希尔排序
冒泡优化、插入和希尔排序1. 冒泡排序优化2. 插入排序3. 插入排序优化4.对比插入排序和选择排序5.希尔排序(插入排序优化的再次优化)具体代码请看:NDKPractice项目的datastructure1. 冒泡排序优化引用个冒泡排序优化 的链接思维:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p2ybCvy4-1604041365006)(…/pic/冒泡排序优化.png)]特点:适用于数组中大部分是排好序的数组,如果大部分都没排好序,那么花费的时间比原来
2020-10-30 15:04:43
153
原创 Jni:05.ndk调试
ndk调试1. `ndk-stack` 调试2. `addr2line`两种方法:1. ndk-stack 调试条件:配置 adb 和 ndk 的环境变量.命令:adb logcat | ndk-stack -sym E:\AndroidStudioProjects\MyBintrayLib\NDKPractice\datastructure28bubbkeselectsort\build\intermediates\cmake\debug\obj\arm64-v8a // 路径为有.so库的路径
2020-10-30 13:34:34
858
原创 数据结构和算法:03.冒泡、选择、插入排序
冒泡、选择排序知识点:1. 宏定义`Log`打印2. rand() 随机3. 冒泡排序4. 选择排序具体代码请看:NDKPractice项目的datastructure知识点:1. 宏定义Log打印#define TAG "TAG"#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)// 其他方法的定义 __android_log_print 取了一个别名(参数固定,可变)2. rand() 随机/
2020-10-30 13:24:34
205
原创 数据结构和算法:0.2.单链表与双链表(LinkedList)
单链表与双链表知识点:1.单链表和双链表的定义需要注意的地方:检测耗费的时间:单链表和双链表的关系手写c++中的LinkedList具体代码请看:NDKPractice项目的datastructure知识点:1.单链表和双链表的定义单链表:只有一个指向下一结点的指针,也就是只能next双链表:除了有一个指向下一结点的指针外,还有一个指向前一结点的指针,可以通过prev()快速找到前一结点,顾名思义,单链表只能单向读取需要注意的地方:结构体或class 属性必须指定或者定义的时候给个默认对象
2020-10-30 11:08:29
232
原创 数据结构和算法:01.定义
数据结构和算法-定义知识点:1.数据结构算法基本概念1.1 数据结构:1.2 算法2. 算法的时间复杂度和空间复杂度知识点:1.数据结构算法基本概念1.1 数据结构:指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系,简单的理解就是元素之间的相互关系。其中逻辑结构分为四类:集合结构线性结构树形结构图形结构存储结构一般分为:顺序存储链式存储1.2 算法指特定问题求解步骤的描述。算法的特性有:输入,输出,有穷性,确定性和可行性。算法的优劣主要从算法的
2020-10-29 17:20:51
285
原创 C++:11.C++中常用函数对象
25.C++中常用函数对象知识点:仿函数1. 预定义函数对象和函数适配器(bind2nd)2.自定义仿函数(函数对象) 和 count_if3. foreach, transform4. find, find_if5. count,count_if6. merge7. sort8. copy,replace知识点:源码阅读和追踪仿函数必须重载()运算符class Equal{private: int equal_number;public: Equal(int equal_nu
2020-10-29 10:32:11
218
原创 C++:10.map、函数对象、一元、二元谓词
24.map、函数对象、一元、二元谓词知识点:1. [map](https://en.cppreference.com/w/cpp/container/map)1.1. 添加数据:1.2.判断是否添加成功:1.3.循环:1.4.删除:1.5查找:2. [multimap](https://en.cppreference.com/w/cpp/container/multimap)3. 容器存对象4. 函数对象5. 一元谓词6. 二元谓词知识点:1. mapmap 不能存 key 重复的数据,要么不生效,
2020-10-28 17:38:36
330
原创 C++:09.STL容器的基本介绍和使用
23.STL容器的基本介绍和使用知识点:1. vector 容器2. stack 容器(先进后出)3. queue 容器(先进先出)4. 优先级队列 priority_queue5. list 容器(链表,双向链表)6. set 容器7.函数谓词和函数对象8. multiset容器知识点:学习精华:集合底层的数据结构原理#include <vector>#include <stack>#include <queue>#include <list>
2020-10-28 17:14:37
138
原创 C++:08.string、c++const增强和引用本质分析
22.string、c++const增强和引用本质分析知识点:1. string 常见操作1.1.string创建1.2. string 与 char* 互转1.3. 遍历1.4. 添加1.5. 删除1.6. 替换1.7. 查找1.8. 大小写转换2. c++ 相对 c 的一些增强2.1 实用性增强2.2 register 增强(c中报错,c++可以通过)2.3 参数增强 (以下代码,c中没问题,c++中会检测报错)2.4 检测增强 (以下代码,c中没问题,c++中会检测报错)3. const 关键字4.
2020-10-28 16:52:18
287
2
原创 C++:07.类型转换、实现System.arrayCopy、异常处理
21.类型转换、实现System.arrayCopy、异常处理知识点:1. 类型转换1.1 static_cast `静态转换`1.2. const_cast `常量转换`1.3. reinterpret_cast `强制类型转换`1.4. dynamic_cast `动态转换`2. native 层实现 System.arrayCopy 的功能3. 异常处理4.NDK异常处理增强知识点:1. 类型转换Student *stu = static_cast<Student*>(person
2020-10-28 15:53:58
452
原创 C++:06.反转单链表、实现ArrayList
20.反转单链表、实现ArrayList知识点:1. 腾讯面试题:2. ArrayList 源码分析知识点:1. 腾讯面试题:用 c/c++ 反转单链表输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLstruct ListNode *reverseList(struct ListNode* head) {struct ListNode *newHead = NULL;struct
2020-10-28 15:16:06
185
原创 C++:05.虚继承、虚函数、模板函数、模板类
19.虚继承、虚函数、模板函数知识点:1. 属性初始化2. 多继承,(在 java 里面是不允许多继承的, c++ 是可以的, 但是你也不能有二义性(歧义))3. 虚继承(二义性)4. c++ 中的多态5. 纯虚函数(类似于:java 中的 抽象类,接口)6. 构造函数和析构函数7. 模板函数(java 中的泛型)知识点:1. 属性初始化class Student: public Person{private: // char* courseName; Course course;
2020-10-28 14:40:13
643
原创 C++:04.操作符重载和类的继承
18.操作符重载和类的继承知识点:1. 操作符重载1.1 加减操作符1.2 自增减运算符1.3 输出运算符1.4 条件运算符1.5 括号运算符2. 类继承2.1 变量修饰符和继承修饰符2.2 初始化父类属性2.3 初始化属性和函数重载2.4 多继承知识点:1. 操作符重载一般来讲我们定义在类的里面格式:返回值 operate需要重载的操作符(参数){} 例如:void operator++(){}1.1 加减操作符class Vector {public: Vector(int x,
2020-10-28 14:21:41
348
原创 C++:03.可变参数、static、对象大小和友元类、函数
17.可变参数、static、对象大小和友元类、函数知识点:1. 可变参数2. static 关键字3. 对象大小4. this 指针5.const 修饰函数6.友元函数6.1 友元函数与普通函数的区别7.友元类知识点:1. 可变参数java中:int ...c++:...va_start(vp,count);:将可变参数放到va_list vp中去,这个宏必须在使用 va_arg 和 va_end 之前被调用。int number = va_arg(vp,int);: 获取可变参数,如果超出
2020-10-28 13:56:15
211
原创 C++:02.类的构造函数、析构函数、拷贝函数
16.类的构造函数、析构函数、拷贝函数知识点:面试题:finalize , finally, final 之间的区别1. 构造函数(可以有很多)1.1.定义1.2.调用2. 析构函数(只能有一个)3.malloc、free、new、delete 区别4. 拷贝构造函数和调用场景知识点:面试题:finalize , finally, final 之间的区别finalize : java中垃圾回收回收该对象的时候会调用的方法 (c 中的析构函数)finally: finally作为异常处理的一部分,
2020-10-28 11:21:13
226
原创 C++:01.引用和函数重载
15.引用和函数重载知识点:1. c 和 c++ 的区别2. 常量3. 引用和常量引用3.1 引用3.2 常量引用4. 函数重载和默认参数5. 类的初探知识点:1. c 和 c++ 的区别c++ 代码中可以混编 c 代码,c++ 里面写 c 代码也可以调用c++ 面向对象(java), c 面向过程很多的开源框架都是用 c++ 写的(大部分基于 c++)打印:#include <iostream> // c++ 的包using namespace std; // 命名的空间
2020-10-28 09:54:00
169
原创 C进阶:10.结构体赋值、套指针、深浅拷贝、大小
14.结构体中的高级话题知识点:1. 结构体赋值操作2. 结构体套指针3. 深拷贝和浅拷贝4. 结构体的偏移量强化知识点:1. 结构体赋值操作结构体赋值相当于是(内容)赋值操作 Student stu1 = {"Eastrise",25}; Student stu2; // strcpy(stu2.name,stu1.name); // stu2.age = stu1.age; stu2 = stu1;// = 赋值操作,java 中 stu2 对象就会变
2020-10-27 17:57:54
252
2
原创 C进阶:09.二级指针和多级指针
13.二级指针和多级指针知识点:1. 指针使用的注意事项2. const 关键字3. 二级指针的内存模式3.1 指针数组3.2 二维数组的几种定义方式4. 多级指针知识点:1. 指针使用的注意事项不要轻易改变指针的位置char* p = NULL; strcpy(p,"string"); // 报错,无效,char p[num]这样使用才有效 p="string"; // 可以 第一个是把string赋值给p,第二个是p指向“string”的首地址。2. const 关键字
2020-10-27 17:20:02
217
原创 C进阶:08.指针赋值、野指针、项目开发模型强化
12.项目开发模型强化知识点:1. 内存四驱模型2. 指针间接赋值的意义3. 野指针和 null 地址4. 字符串强化5. 项目开发模型强化知识点:1. 内存四驱模型void change1(int number){ // 不能修改 number = 300; printf("%p\n",&number);}int main(){ int a = 100; // 修改 a 的值 a = 200; change1(a); // a变量的值
2020-10-26 17:51:03
271
原创 C进阶:07.内存四驱模型
11.内存四驱模型知识点:1. 数组作为参数传递时获取不到长度的问题!!2. 数据类型剖析3. 变量的本质4. 内存四驱模型4.1 程序运行的流程:4.2 四驱模型5. 栈的开口方向6. 指针强化知识点:1. 数组作为参数传递时获取不到长度的问题!!原因:数组作为参数传递,会退化成为一个指针,传递的是首地址 (高效)2. 数据类型剖析数据类型的本质:一块连续大小的内存空间数据类型的别名:int32_t void指针数据类型:void* 代表任意的数据类型的指针3. 变量的本质
2020-10-26 17:20:42
358
原创 Jni:04.数组排序、缓存策略和异常处理
Jni学习:数组排序、缓存策略和异常处理知识点:1. 数组排序:2. 局部引用和全局引用2.1. 局部引用2.2 全局引用3. 缓存策略 static, native层有一大堆方法需要去获取 name 属性 // 初始化全局静态缓存3.1 局部静态缓存3.2 全局静态缓存4. 异常处理(简单讲,C++异常)代码请看:10.JNI基础-缓存策略和异常处理知识点:1. 数组排序:void qsort(void * _Base, size_t _NumOfElements, size_t _SizeO
2020-10-26 16:58:32
262
StarUML-3.2.2.dmg
2020-02-06
Genymotion_ARM_Translation.zip
2018-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅