开课吧学习博客
文章平均质量分 91
马•晓
职位:机器视觉工程师 CV Engineer
主要研究方向:机器视觉 工业数据分析
主要编程语言:C++ Python Matlab
主要技能:机器视觉 机器学习 统计分析 OpenCV Halcon PaddlePaddle OpenVINO Scikit-learn
展开
-
STL中的numeric头文件和valarray头文件
一、numericSTL中的numeric头文件中定义了一组对数值序列执行特定操作的算法。由于这些算法的灵活性,它们也可适用于其他类型的序列。numeric中的函数包括:(1)accumulate(),将指定范围内的元素按照给定的函数进行计算,并将这些计算结果累加到给定的初始值上,并返回最终的计算结果,时间复杂度为O(N);(2)adjacent_difference(),将指定范围内的元素,其中第一个位置将原始元素复制到相应位置,其他位置将其与前一位置的差值复制到相应位置,时间复杂度为O(N);原创 2020-10-26 18:14:10 · 319 阅读 · 1 评论 -
STL中的algorithm头文件
STL中的algorithm头文件头定义了一组专门用于范围元素的函数。范围元素是可以通过迭代器或指针访问的任何对象序列,例如数组或某些STL的容器实例。但需注意,算法通过迭代器直接对值进行操作,不会以任何方式影响或改变容器的结构(它从不影响容器的大小或存储分配)。algorithm中的函数可分为9类:1.不修改范围内元素的操作:(1)all_of(),测试范围内元素是否都满足指定的条件;(2)any_of(),测试范围内元素是否至少有一个满足指定的条件;(3)none_of(),测试范围内元素是原创 2020-10-26 12:02:31 · 3233 阅读 · 1 评论 -
数据结构——位集合(bitset)
位集合(bitset)用来方便地管理一系列的bit位,其只能存储值为0或1,true或false的值。该类模拟一个bool元素数组,但针对空间分配进行了优化,通常每个元素只占用一个位。在位集合中,每个位位置都可以单独访问,例如,对于一个名为foo的给定位集合,表达式foo[3]访问其第四位,就像正则数组访问其元素一样。但是,因为在大多数C++环境中,没有元素类型是单个位,所以各个访问元素为特殊引用类型。位集合可以从整数值和二进制字符串构造,并转换为整数值和二进制字符串;也可以以二进制格式直接从流中提取。原创 2020-10-26 10:11:08 · 869 阅读 · 0 评论 -
数据结构——关联容器
一、关联容器定义关联容器支持高效的关键字查找和访问。两个主要的关联容器(associative container)类型是map和set。map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字:set支持高效的关键字查询操作——即检查一个给定关键字是否在set中。在某些文本处理的过程中,可以用一个set来保存想要忽略的单词。而字典则是一个很好的使用map的例子:可以将单词视为关键字,将单词释义视为值。在STL中提供原创 2020-10-25 17:18:05 · 559 阅读 · 0 评论 -
数据结构——哈希表
一、哈希的定义哈希技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。我们把这种对应关系f称为哈希(hash)函数,也称为散列函数。采用哈希技术将记录存储在一块连续的存储空间中,则这块连续存储空间称为哈希表(hash table)。哈希表的关键值通过哈希函数映射到数组上,查找时通过关键值直接访问数组。哈希技术既是一种存储原创 2020-10-25 14:46:09 · 335 阅读 · 0 评论 -
数据结构——图
图(graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。在图中,数据元素称为顶点(vertex)。在图中,任意两个顶点之间都有可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。若顶点vi到vj之间的边没有方向,则称这条边为无向边(edge),用无序偶对(vi,vj)来表示。若从顶点vi到vj的边有方向,则称这条边为有向边,也称为弧(arc)。用有序偶<vi,vj>来表示,vi称为弧尾(ta原创 2020-10-22 22:37:33 · 1701 阅读 · 1 评论 -
数据结构——字符串
一、标准字符串字符串(string)是由零个或多个字符组成的有限序列。字符串的比较是通过组成字符串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号(即ASCII值)。字符串的常见操作有:(1)将字符串指定为给定值;(2)将给定字符串复制到另一字符串;(3)清空字符串字符;(4)判断字符串是否为空;(5)返回字符串的长度;(6)比较两个字符串;(7)将两个字符串拼接成一个新的字符串;(8)提取字符串的一部分作为新的字符串;(9)在一个字符串中查找另一个给定字符串是否原创 2020-10-21 22:30:35 · 839 阅读 · 0 评论 -
数据结构——树
一、树树是n(n≥0)个结点的有限集合。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又有一棵树,并且称为根的子树。结点拥有的子树数称为结点的度(degree)。度为0的结点称为叶结点(leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。除根结点之外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。树中结点的最大层次称为树的深度原创 2020-10-20 22:20:46 · 619 阅读 · 0 评论 -
数据结构——顺序容器
一个容器就是一些特定类型对象的集合。顺序容器为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。所有顺序容器都提供了快速顺序访问元素的能力。但这些容器在以下方面都有不同的性能折中:(1)向容器添加或从容器中删除元素的代价;(2)非顺序访问容器中元素的代价。STL中一共提供了6种顺序容器:(1)array,固定大小数组。支持快速随机访问。不能添加或删除元素。(2)vector,可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很原创 2020-10-18 19:08:01 · 550 阅读 · 0 评论 -
数据结构——查找
查找是指在数据集合中寻找满足某种条件的数据元素的过程。用于查找的数据集合则称为查找表(search table)。查找表中的数据元素类型是一致的,并且有能够唯一标识出元素的关键字。如果从查找表中找出了关键字等于某个给定值的数据元素,则称为查找成功,否则称为查找不成功。通常对查找表有4种操作:(1)查找:在查找表中查看某个特定的记录是否存在;(2)检索:查找某个特定记录的各种属性;(3)插入:将某个不存在的数据元素插入到查找表中;(4)删除:从查找表中删除某个特定元素。如果对查找表只执行前两种原创 2020-10-17 17:41:57 · 360 阅读 · 0 评论 -
数据结构——排序算法
给定一个n个元素的线性表(a0,a1,…,an-1),排序算法返回这个序列重新排列的结果(A0,A1,…,An-1),满足A0≤A1≤…≤An-1。这里的小于等于号可以替换为其他比较符号。根据排序过程中元素是否完全保存在内存中,可以将算法分为内部排序(internal sort)和外部排序(external sort)。对于一个排序算法,如果任意两个元素ai和aj在排序前的线性表中满足条件i<j且ai=aj,在排序后ai仍然在aj之前,则称这个排序算法为稳定排序(stable sort),否则称这原创 2020-10-13 10:30:44 · 312 阅读 · 0 评论 -
makefile的编写贴士
最基本的Makefile中包含了一系列形式如下的规则。每一条规则的命令前,必须要有一个制表符\t。目标: 依赖1 依赖2 …命令例如:array.o: array.c array.h gcc -c -o array.o array.cPoint.o: Point.cpp Point.h g++ -c Point.cpp其表示生成的文件的目标代码文件array.o,它依赖于array.c和array.h。当我们在命令行中执行make array.o时,根据这一规则,如果arra原创 2020-10-10 21:05:12 · 144 阅读 · 0 评论 -
C语言指针资料汇总
一、标准指针指针类型的大小由系统的编译器位数决定,一般占8个字节。指针的类型,就代表存储的数据类型,影响寻找多长字节的数据。指针的值(即地址)应属于下列4种状态之一:(1)指向一个对象(2)指向紧邻对象所占空间的下一个位置(3)空指针,意味着指针没有指向任何对象(4)无效指针,也就是上述情况之外的其他值对所有的指针变量进行显式的初始化是种好的做法。初始化的方法有:(1)使它指向现有的内存;(2)给它分配动态内存。一般来说,指针都是初始化为NULL的,但对NULL指针进行解引用会出现错误。因此原创 2020-09-13 19:28:49 · 499 阅读 · 1 评论 -
C语言文件操作
C语言获得的文件,是使用FILE结构体进行定义的。scanf是fscanf对stdin的特化,printf是fprintf对stdout的特化,perror是fprintf对stderr的特化。C语言对文件操作有2种方式:(1)文本文件(也就是字符文件),可使用函数fprintf,fscanf,fgets,fgetc,fputs,fputc(2)二进制文件(即其数据是数组、结构体等非字符型复杂数据),可使用函数fread,fwrite文件操作的模式包括:(1)“r”读模式(2)“w”写模式(原创 2020-09-13 16:34:32 · 166 阅读 · 0 评论 -
C语言代码规范
一、排版1.相对独立的程序块之间、变量说明之后必须添加空行。2.较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。paRam->srcDstCIdx = (pXferParams->cDstOffset << 16) | pXferParams->cSrcOffset;3.不允许把多个短语句写在一行中,即一行只写一条语句。rect.length原创 2020-09-07 15:53:18 · 2728 阅读 · 0 评论 -
C语言中的安全输入、输出和字符串处理
C语言中,从bash获取输入和输出的类型可分为数字、字符和字符串3类。虽然使用scanf()、getchar()是危险的,但从bash获取输入数字和字符还是只能使用该函数。在使用scanf()获取数字和字符时,会遇到2个问题:(1)输入的内容与格式符不匹配(2)缓冲区中剩余字符的处理为解决上述问题,在使用scanf()前先使用printf()函数提示输入信息,在scanf()中只使用%d,%f,%c控制符,而不使用其他控制符,scanf()后对缓冲区和非法输入进行处理。例如:// 一次读取一个数原创 2020-09-07 11:29:38 · 1770 阅读 · 0 评论 -
打卡机程序编写回顾
算法方面没什么难点,主要就是一些最基本的操作细节。1.字符串和字符数组在C语言中,字符串和字符数组都用char arr[]形式声明,具体初始化赋值存在差别:// 字符数组赋初值 char cArr[] = {'I','L','O','V','E','C'}; // 字符串赋初值 char sArr[] = "I LOVE C";在声明字符串时 需为结尾’\0’保留一个字节,否则获得的字符串不完整,在实际输出时将无法结束,从而导致后续跟随的不属于本字符串的内容也将被一起输出。原创 2020-08-27 08:17:08 · 405 阅读 · 0 评论 -
C语言构造类型
C语言预处理程序的预处理过程就是将预处理指令(可以简单理解为#开头的正确的指令)转换为实际代码当中的内容(此时会将注释代码去掉)。define的意思是宏定义,用标识替换被标识的内容。#define PI 3.14 // 只是简单替换 不会占用内存const int PI = 3.14; // 定义了一个全局变量 会占用内存宏定义只会做简单的替换,而不会计算优先级等问题。为了避免运算符优先级的影响,需要对替换单元加上括号,保证优先级计算。#define MAX(A, B) ((A) > (原创 2020-08-25 22:05:46 · 645 阅读 · 0 评论 -
计算器程序编写回顾
编写一个计算器程序,可实现小数的+ - * /和括号负数运算。其间过程,费时N久,踩坑无数,现总结其间关键点。1.算法计算器程序实现的最好用算法就是把输入表达式(称为中缀形式)转换为后缀形式,然后再进行计算。其间需要使用操作符合运算过程数据2个堆栈。踩坑第1点,网上查到的中缀转后缀算法说明,很多都不清楚,没有解释连续2个操作符优先级相等的情况如何处理,还有很多没有介绍遇到负数如何处理。经过不断试错,最后通过以下2篇文章,了解真谛。https://blog.csdn.net/wanzhen433原创 2020-08-24 15:39:22 · 239 阅读 · 0 评论 -
C语言编程基础
一、变量是什么?变量就是对一块内存进行标记的标识符:(1)英文+数字+下划线(个人倾向使用小写加大写开头单词组合 不使用下划线);(2)不要和系统命名冲突变量存储在哪里?变量的标识其实就是存放在可执行文件对应的段内:__text,__data,__bss变量对应的内容存放在系统当中的内存区域中(1)bss段的数据为未初始化的全局变量(2)data段的数据为程序中已初始化的全局变量(3)stack段的数据为程序临时创建的局部变量二、运算符1.运算符是完成变量或表达式进行运算的符号(1)运原创 2020-08-08 10:14:34 · 259 阅读 · 0 评论 -
Linux常用命令和调试方法
一、Linux常用命令目录操作命令:(1)创建目录命令mkdir [选项] 目录(2)删除目录命令rmdir [选项] 目录列表(3)显示当前工作目录命令pwd(4)改变当前工作目录命令cd [directory](5)改变目录权限命令chmod [who] [+|-|=] [mode] 文件名文件操作命令(1)列举文件命令ls [选项] [文件目录列表](2)查找文件命令find [目录列表] [匹配标准](3)查找文件内容命令grep [选项] [查找模式] [文件名原创 2020-08-08 09:13:01 · 706 阅读 · 0 评论