自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL源码剖析(五)——关联式容器

1、概览所谓关联式容器,观念上类似于关联式数据库,每笔数据都有一个键值(key)和实值(value),当元素被插入到关联式容器中,容器内部结构(可能是红黑树和哈希表)便依照键值大小,以某种特定规则将这个元素放置在适当位置,关联式容器没有所谓头尾(只有最大元素和最小元素)。1.1、树由节点(nodes)和边(edges)组成,最上方的是根节点(root),每个节点具有方向性的边(diercted edges),用来和其他节点相连。无子节点的称为叶节点,如果最多允许存在两个子节点,即所谓二叉树(binar

2021-03-16 20:20:32 246

原创 《STL源码剖析》(四)——序列式容器

1、序列式容器所谓序列式容器,其中的元素都可序,但未必有序,C++本身提供了一个序列式容器array,STL另外提供了vector、list、deque、stack、queue、priority-queue等序列式容器,其中stack和queue由于只是将deque改头换面,技术上归类为一种配接器(adapater)。2、vector2.1vecor的数据结构数组2.2vector和array的区别1、vector是动态空间,随着元素增加,它的内部机制会自行扩充以容纳新的元素。2、array是

2021-03-14 21:33:31 303

原创 C++(八)——typename用法

1、typename来源1.1原因1:从表面上看,下面模板的参数只支持用户自定义类型,但其实对语言内置类型或者指针调用也支持:template <class T>int compare(const T &v1, const T &v2){ if (v1 < v2) return -1; if (v2 < v1) return 1; return 0;}//用指针调用:int v1=1 ,v2=2;int ret= cmpare

2021-03-14 16:01:24 19462 3

原创 《STL源码剖析》(三)——迭代器与traits编程

1、迭代器STL编程中,容器和算法相互独立,容器里面是数据,算法提供对数据的操作,在算法操作的过程中,要用到迭代器,迭代器可以看作是容器和算法的桥梁。2、迭代器设计模式在设计模式中,有专门的迭代器模式。描述如下:一种能够顺序访问问题中每个元素的方法,使用该方法不能暴露内部的表达方式。在STL编程结构中,迭代器是一种模板class,迭代器在STL中得到广泛的应用,通过迭代器,容器和算法可以有机的绑定在一起,只要对算法给予不同的迭代器,比如vectot::iterator、list::iterator

2021-03-14 10:42:04 234

原创 《STL源码剖析》(二)——空间配置器

一、 为什么要有空间配置器:1、小块内存带来的内存碎片问题单从内存分配的角度来讲,由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下:堆中空闲的总量满足一个要求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足请求)2、小块内存频繁申请释放带来的性能问题:(1)开辟空间的时候,分配器会找一块空闲给用户,找空闲块需要时间,尤其是在外碎片比较多的情况。如果分配器找不到,就要考虑假碎片现象(释放的小块内存没有合并),这时候就要将这些已经释放的空闲块合并,这也需要时间。(2)mall

2021-03-13 14:18:14 239

原创 《STL源码剖析》(一)——总纲

1、STL六大部件容器(Containers)分配器(Allocators)算法(Alogrithms)迭代器(Iterators)适配器(Adapters)仿函式(Functors)2、容器是前闭后开的区间[ ) c.begin()指向第0个元素 c.end()指向最后一个元素的后一个3、容器结构分类(1)序列型容器Array(c++ 11)VectorDequeListForward_List(C++ 11)(2) 关联型容器SetMultisetMapM

2021-03-11 22:40:37 138

原创 C++(七)——11/14 新特性

总结碰到的C++11/14新特性的内容,碰到一个新加一个,常看常新1、auto变量2、for(auto a: {1,2,3,4,5,6})3、STL中:新的容器类型 array、forward_list、Unordered_Set/Multiset、Unordered Map/Multimap

2021-03-11 21:54:22 107

原创 python:OS和shutil常用函数小结

最近经常用到os库,每次用的时候总在找,抽空总结一下os常用函数。OS:OS.path常用:1、os.path.isfile(path) os.path.isdir(path)检查所给的路径是否是文件/目录2、os.path.exits(path)检查所给的路径是否存在3、os.path.abspath(path)获取一个路径的绝对地址4、os.path.spilt(path)把目录分割成目录、文件名或者目录返回元组5、os.path.spiltext(path)分离文件名和扩展名

2021-01-15 16:09:33 182

原创 Pytorch:神经网络实现的基本步骤

基本步骤1、 准备数据集2、 定义网络结构3、定义损失函数4、定义优化算法5、迭代训练1、准备好Tensor形式的输入数据及标签(涉及到torch.utils.data.Dataset和DataLoader)2、定义好网络前向传播用于计算网络的输出(output)以及网络的损失(loss)3、定义传播进行网络参数更新:(1)将上一个迭代所计算的梯度进行清零:optimizer.zero_grad()(2)进行本次迭代的梯度计算:loss.backward()(3)更新网络的权值参数:o

2021-01-15 15:40:40 982

原创 机器学习:K-means和K-medoid聚类算法

一、两个算法的区别两者的区别主要在质心的选择,K-means是样本点均值,K-medoid是从当前分类样本点中选取距离和最小的点。二、算法步骤1、K-means1、随机选取K个质心2、计算各个点到质心的距离3、将点的类划分到离他最近的质心,形成K个cluster4、根据分类好的cluster,在每个cluster内重新计算质心每个cluster中各个点的平均值5、重复迭代2-4次,知道前后两次分类误差小于指定值2、K-medoids1、随机选取K个质心质心必须是某些样本点的值2、计

2021-01-03 13:38:04 4647 3

原创 计算机视觉:传统图像处理方法

1、图像分割经典的数字图像分割算法一般是基于灰度值的两个基本特征之一:不连续性和相似性。(1)基于阈值:基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值相比较,最后将像素根据比较结果分到合适的类别中。算法的关键:确定阈值。(2)基于边缘:所谓边缘是指图片中两个不同区域的边界线上连续的像素点的集合,是图像局部特征不连续性的反映,体现了灰度、颜色、纹理等图像特性突变。先确定图像中的边缘像素,把这些像素连接在一起就构成了所需的区域边界。(3)基于区域将图像按照相似性

2020-12-29 10:27:37 5240

原创 计算机视觉:图像预处理

1、常见存储:RGB:加法混色,三个颜色通道CMYK:减法混色,四个维度HSV:人类视觉概念,三个要素:色调、饱和度、亮度CIE-XYZ:基于人类颜色视觉的直觉测定:中波、短波、长波2、图片存储原理:RGB:三通道彩色图:GRAY=R0.3+G0.59+B*0.113、存储格式:BMP:采用位映射存储,占用空间大JPG:最常见的有损压缩,能够将图片压缩到10:1-40:1GIF:基于LZW算法的连续色调的无损压缩,压缩率在50%PNG:比较新的图像文件格式,能够提供笔GIF小30%的无

2020-12-29 10:17:49 1235 1

原创 计算机视觉:图像特征与描述

1、颜色特征:量化颜色直方图、聚类颜色直方图(1)量化颜色直方图适用颜色空间:RGB、HSV等颜色空间操作:颜色空间量化、单元(bin)由单元中心代表统计落在量化单元上的像素数量优势:计算高效劣势:量化问题、稀疏(2)聚类颜色直方图适用颜色空间:Lab等颜色空间操作:使用聚类算法对所有像素点颜色向量进行聚类单元(bin)由聚类中心代表问题:两幅颜色相近的颜色直方图,只是相错一个bin时,采用L1距离或者欧拉距离计算两者相似度会得到很小的相似度值。解决方法:考虑到相似到不相同的颜色之间

2020-12-29 10:14:24 1375

转载 Pytorch:迁移学习

PyTorch使用教程-迁移学习前言如果你认为深度学习非常的吃GPU,或者说非常的耗时间,训练一个模型要非常久,但是你如果了解了迁移学习那你的模型可能只需要几分钟,而且准确率不比你自己训练的模型准确率低,本节我们将会介绍两种方法来实现迁移学习迁移学习方法介绍1、微调网络的方法实现迁移学习,更改最后一层全连接,并且微调训练网络2、将模型看成特征提取器,如果一个模型的预训练模型非常的好,那完全就把前面的层看成特征提取器,冻结所有层并且更改最后一层,只训练最后一层,这样我们只训练了最后一层,训练会非常的

2020-12-28 10:28:22 604

原创 pytorch图像处理:读取数据集Dataset和ImageFolder

https://blog.csdn.net/weixin_42147780/article/details/102683053?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160385383319725255519967%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160385383319725255519967&biz_

2020-10-28 18:54:09 7335 1

原创 pyrtorch图片处理:torchvision.transforms常用方法

transforms.Compose()串联多个图片变换的操作。transforms.Resize()将图片转换到制定大小。Resize(224) 将图片短边缩放到224,长边做等比缩放Resize([224,224])将图片缩放到224*224transforms.CenterCrop()图片裁剪,从中心位置裁剪指定大小的图片。transforms.ToTensor()(1) transforms.ToTensor() 将numpy的ndarray或PIL.Image.

2020-10-28 18:43:53 1261

原创 算法概述——目前关于算法的认识

断断续续刷了50道左右算法题了,也看了一些常用的解决面试算法题的博客。想小小总结面试算法题的思路,并打算后续把刷到的常用算法题思路陆续写一些博客。五大算法思想:1、穷举 穷举算法是最简单的思路,算法效率低,但适合一些没有明显规律的场合。基本思想:从所有可能的答案中找出正确的答案,其执行步骤如下:(1)对于一种可能的情况计算结果(2)判断结果是否满足要求,如果不满足继续执行(1)来搜...

2019-09-06 16:35:17 497

原创 计算机网络(四)——面试常见问题

一、概述1、计算机网络性能指标(1)速率,传输数据速率,也叫数据率,比特率,单位有:b/s、kb/s、Mb/s、Gb/s、Tb/s(2)带宽,最高传输速率,即为速率最高值,单位与速率相同(3)吞吐量,单位时间通过某个网络信道或接口的数据量,单位b、kb、Mb、Gb、Tb(4)时延,发送时延(主机或路由器发送数据所需时间)、传输时延(电磁波在信道中传输所需时间)、处理时延、排队时...

2019-03-14 20:07:20 532

原创 计算机网路(三)——TCP协议深入分析

一、TCP通信时序1、三次握手首先客服端发起连接,发送请求,然后服务器响应请求,然后客户端主动关闭连接。两条竖线表示这个通讯的两端,从上到小表示时间的先后顺序,注意:数据从一端传到网络的另一端也需要时间,所以图中的箭头都是斜的,双方发送的段按时间顺序编号为1-10,各段中的主要信息在箭头上标出,例如段2的箭头上标着SYN,8000(0),ACK1001,表示段中的SYN位置1,32位序...

2019-03-14 16:09:17 1151

原创 计算机网络(二)——网络协议基础、TCP/UDP

一、协议的概念1、什么是协议:从应用的角度出发,协议可以理解为“规则”,是数据传输和数据的解释的规则。仅在A、B之间遵守的传输规则称为原始协议。当协议被更多人采用,不断的增加,完善,最终形成一个稳定的、完整的文件传输协议,被广泛应用于各种文件传输过程中,该协议就成为一个标准协议。2、典型协议:传输层:常见协议有TCP/UDP协议应用层:常见的协议有HTTP协议、FTP协议...

2019-03-05 09:37:40 1857 2

原创 C语言项目——聊天室(二)

5、为什么选择库函数?什么时候用库函数通过库函数我们可以更好地使用其功能,节省了我们自己写函数的过程,并且对于已经运用成熟的库函数,我们很难 写出更加高效 的新算法。文件分类:通过流进行输入输出:文本文件(存放ASCII码)和二进制文件(二进制编码方式)从用户角度讲: 普通文件和设备文件从文件内容讲:源文件、目标文件、可执行文件、头文件、数据文件等 6、为什么数据库选择...

2019-02-14 10:33:53 1190

原创 C语言项目——聊天室(一)

1、makefile的作用:makefile的好处就是——“自动化编译” ,一旦写好makefile文件,只需要一个make命令,整个工程就可以自动完成编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多说的IDE都有这个命令,比如:Delphhi中的make,Visual C++中的nmake,Linux下GNU的make。...

2019-02-13 15:03:59 3784

原创 面向对象进阶(二)——创建型模式

一、简单工厂模式通过专门定义一个类来负责其他类的实例,被创建的实例通常有公同的父类。1、包含的角色及其职责(1)工厂角色简单工厂模式的核心,它负责创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。(2)抽象角色简单工厂模式创建的所有对象的父类,它负责描述所有实例所共有的公共接口。(3)具体产品角色简单工厂模式所创建的具体实例对象。2、简单...

2019-01-29 16:03:27 129

原创 面向对象进阶(一)——设计模式简介

一、模式在一定的环境中解决某一问题的方案,包括三个基本元素——问题、解决方案和环境。 二、设计模式这是一套被反复使用,多数人知晓的,经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于他人于系统都是多赢的,设计模式使得代码编制真正工程化。设计模式是软件工程的基石脉络,如同大厦的结构一样。 三、为什么学习设计...

2019-01-27 09:56:08 242

原创 C++复习之路(六)——异常和文件

一、C++类型转换C语言强转存在的问题:过于强暴:任何类型之间都可以转换,编译器难以判断正确性难于定位:咋源码中无法定位使用强转的语句。  //不推荐使用强转。1、普通类型转换 :static_cast2、指针类型转换 : reinterpret_cast 3、类层次之间的转换 : dynamic_cast    4、用于const和非const之间的转换 : cons...

2019-01-25 19:48:39 557

原创 操作系统(四)——多线程编程

一、线程概述1、什么是线程线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它与同属于一个进程的其他线程共享进程所拥有的全部资源。2、进程和线程Linux进程创建一个新线程时,线程将拥有自己的栈(因为线程有自己的局部变量),但它与的创建者共享全...

2019-01-23 23:06:59 1591

原创 C++复习之路(五)——STL标准模板库

一、STL概述。1、基本概念STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件统称。STL从广义上讲分为三类:algorithm(算法)、container(容器)和 iterator(迭代器)。容器和算法可以通过迭代器无缝地连接。几乎所有代码都采用了模板类和模板函数的方式。相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在...

2019-01-23 11:39:33 603

原创 计算机网络(一)——网络编程

一、Linux网络模型Linux中网络栈的介绍一般分为四层的Internet模型:TCP/IP协议族体系结构及主要协议:1、TCP/IP协议族TCP/IP实际上是一个协同工作的通信家族,为网络通信提供通路。为方便讨论TCP/IP协议族,大体上分为三部分:Internet协议(IP)。传输控制协议(TCP)和用户数据报协议(UDP)。处于TCP和UDP之上的一组应...

2019-01-19 16:59:44 3579

原创 数据库(一)——SQLite3数据库编程

最近三天搞得我有点头大,接连Linux进程间通信、多线程编程、网络编程和数据库编程,都是Linux这一块的核心;中间还被导师催论文,每天熬到半夜写论文。今天仿佛是个转折点,论文交上去了,接下来的两天都是自习,今晚宿舍就有空调了,终于不用冻得睡不着了。。。想想就觉得很舒服。好了,废话少说,倒着来吧,先从数据库开始整理。一、基本SQL语句1、数据库与表SQLite将每个数据库都保存为一个文...

2019-01-18 20:18:05 2337

原创 Linux系统(二)——Linux环境下的开发工具

接着上一篇博客,把Linux环境下常用的vim编辑器,gcc工具链,makefile和gdb等工具的使用理一理。一、vim编辑器1,工作模式 vim是Linux常用文本编辑器。vim有两种基本工作模式: 命令模式:输入的字符作为命令使用,不进入被编辑的文档中。 编辑模式:输入的字符将修改文档的内容。 在...

2019-01-16 00:50:11 14674 1

原创 Linux系统(一)——基础知识、常用命令

       准备考研,沉寂了一年时间,重新出发。先做个规划把,首先以一天两个大块的进度把Linux C的知识点重新梳理一遍,然后网络聊天室的思路理一理,在过完C++的知识后,结合QT、Mysql用C++把聊天室重写一遍。今天,把Linux的基础知识,shell命令,vim、gcc、makefile等Linux系统下常用开发工具温习一遍。一、Linux基础知识        Linux 从...

2019-01-15 17:21:48 620 1

原创 单片机:中断及定时器工作原理

一、中断 1、中断的概念  CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断产生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A中断的地方继续处理事件A(中断返回),这一过程称为中断。 引起CPU中断的根源叫做中断源。 中断源向CPU的请求,叫做中断请求。 CPU暂时中断原来的事件A...

2019-01-15 09:22:03 4799

原创 Ncurse编程:屏幕输出和窗口机制

一、编译包含NCURSES函数的程序#include&lt;ncurses.h&gt;编译和连接命令:gcc &lt;程序文件&gt; -lncurses二、"你好!"程序#include&lt;ncurses.h&gt;//包含stdio.h#include &lt;locale.h&gt; //中文库int main(){initsrc();  //初始化,进入...

2019-01-15 09:21:39 840

原创 C++基础知识

面向对象编程基础面向对象编程基于三个基本概念:数据抽象-类 继承-基类/派生类 动态绑定-基类的函数or派生类的函数面向对象编程概述面向对象编程的关键思想是多态性(polymorphism)。多态性派生于一个希腊单词,意思是“许多形态”,之所以称通过继承而相关联的类型为多态类型,是因为在许多情况下可以互换地使用派生类型或基类型的“许多形态”。在C++中,多态性仅用于通过继承...

2018-03-18 09:02:56 246

原创 MultiSIM、Altium Designer和proteus对比

Multisim有超强板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。高版本可以进行单片机等MCU的仿真。Multisim有 实际元器件和虚拟元器件,它们之间根本差别在于:一种是与实际元器件的型号、参数值以及封装都相对应的元器件,在设计中选用此类器件,不仅可以使设计仿真 与实际情况有良好的对应性,还可以直接将设计导出到Ultiboa...

2018-03-15 22:03:57 11144

原创 单片机:IIC总线通信

一、IIC总线通信1、简介: IIC 即Inter-Integrated Circuit(集成电路总线),I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。2、常用的串行扩...

2018-02-08 20:41:43 2747

原创 单片机:矩阵键盘和LCD1602

一、矩阵键盘                            1、检测按键的方法:(1)先使1-4全部赋低电平,5-8赋高电平。当有按键按下时,5-8中会有某个点平被拉低。(2)然后依次将1-4中的某一位置0,其他位置1,观察对应返回值,即可确定哪个按键被按下。2、对应程序unsigned char bsp_mkeyscan(){ unsigned char keyvalue = ...

2018-02-08 14:58:28 18176 3

原创 蓝桥杯:8届10题k倍区间

标题: k倍区间给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i 你能求出数列中总共有多少个K倍区间吗?  输入-----第一行包含两个整数N和K。(1 以下N行每行包含一个整数Ai。(1 输出-----输出一个整数,代表K倍区间的数目。  例如

2018-02-04 13:42:10 327

原创 单片机:中断及定时器工作

一、中断 1、中断的概念  CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断产生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A中断的地方继续处理事件A(中断返回),这一过程称为中断。 引起CPU中断的根源叫做中断源。 中断源向CPU的请求,叫做中断请求。 CPU暂时中断原来的事件A

2018-02-01 20:17:31 1389

原创 单片机:数码管的动态扫描

#include"bsp.h"sbit DUAN = P0^0;sbit WEI = P0^1;unsigned char TABLECA[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};unsigned char TABLECC[16] = {0x3f,0x...

2018-02-01 18:45:33 2539

空空如也

空空如也

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

TA关注的人

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