- 博客(101)
- 收藏
- 关注
原创 bfs 套路 C语言实现 附带1162地图分析队列代码
#define MAX_NUMS 1000000 #define MAX 1000000000 typedef struct Node_ { int x; int y; }Node; typedef struct Queue_ { Node arr[MAX_NUMS]; int front; int rear; }Queue; vo...
2020-03-01 23:45:37
910
原创 【算法】BFS套路 含队列代码队列
1126 地图分析 #define MAX_NUMS 1000000 typedef struct Node_ { int x; int y; }Node; typedef struct Queue_ { Node arr[MAX_NUMS]; int front; int rear; }Queue; void QueueI...
2020-03-01 23:35:17
381
转载 【C++】STL容器总结
https://blog.csdn.net/hudfang/article/details/52934130 三大类容器: 1. 序列式容器:vector、deque、list vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。vector有多个构造函数,默认的构造函数是构造一个初始长度为0的内存空间,且分...
2018-09-13 14:18:14
325
原创 【Python】模块和包
把代码放在不同的py文件中,每个py文件就是一个模块。不同模块中,可以存在相同的变量名。 在一个模块中调用其他模块时候,用import关键字,比如 import math。 当模块很多时候,模块名容易重名,这时候需要把模块放在不同的包中,这样模块重名也可以了。引用完整模块需要: 在文件系统中,一个包就是一个文件夹,一个模块就是一个py文件,包可以有多级。 包与普通文件夹不同之处在于,包...
2018-09-13 00:02:58
266
原创 【Python】decorator
编写decorator: 首先编写decorator函数,以@log为例: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 在这里,log函数中定义了一个fn函数,fn中打印了log并返回f,log函数返回fn。注意,这...
2018-09-12 23:37:49
288
原创 【Python】Python中的匿名函数
由于Python支持高阶函数的存在,而高阶函数支持函数作为输入参数,有时候,我们不定义传入的函数,而直接在传入参数的地方,把这个函数的表达式写出来更方便,这就是Pythong中的匿名函数。 >>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81] 上面就是匿...
2018-09-12 10:20:13
317
原创 【Python】Python中的高阶函数
map() 接受两个参数,一个是函数变量,一个是List,map()会把函数变量作用于List中的每个元素,最后返回一个新的List。 reduce() 接受两个参数,一个是函数变量,一个是List;与map()的区别在于,reduce中的函数变量必须接受两个参数,而reduce则会把这个函数依次作用于前面的处理结果和下一个元素。 例如,编写一个f函数,接收x和y,返回x和y的和: d...
2018-09-11 09:25:43
238
原创 【Python】函数式编程
函数式编程,更接近计算,而不是机器指令 在Python中,可以创建一个变量指向一个函数,比如 f=abs,那么f就是一个函数变量,我们可以调用它:f(-10)。 可以接受函数变量作为参数的函数就是高阶函数。而这个函数变量,在高阶函数中往往会处理其他参数,举例: def add(x, y, f): return f(x) + f(y) add(-5, 9, abs) ...
2018-09-10 22:53:57
212
原创 【Python】列表生成式
生成列表的方法有: 1. 使用range: >>> range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...] 2. 使用for,以及append()方法 3. 最重要的列表生成式: >>> [x * x for x in ra...
2018-09-10 16:13:16
601
原创 【Python】迭代
Python的for循环操作很抽象。 迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果,根本不关心迭代内部是如何实现的。 1. 迭代List 对于有序集合,元素确实是有索引的。如果我们想知道元素的下标,可以使用enumarate()函数。 >>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>...
2018-09-10 12:04:16
328
原创 【Python】切片
如果对数组进行分段提取,我们可能会用下标的方式,如果提取的量太大,那么可能会比较麻烦,所以Python提供了切片操作符。 例如: >>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> L[0:3] ['Adam', 'Lisa', 'Bart'] 第一个参数0表示,从下标0开始;第二个参数3表示,直到3,但不包括3...
2018-09-10 11:28:13
12411
2
原创 【Python】函数
默认参数: Python中定义函数,可以有默认参数,也就是说,在定义函数时候,给形参赋值;调用的时候,,如果没有传入新的参数,就用默认的参数,如果传入了新的参数就用新的参数。比如下面这个求n次方的函数: def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return...
2018-09-10 10:41:35
242
原创 【Python】set
set和List类似,都是数组,区别在于,set中的元素不会重复,且存放是无序的。 创建set的方法是,调用set,并将一个List传给它。 >>> s = set(['A', 'B', 'C']) 由于set是不存在重复元素的,如果我们传入一个有重复元素的List,系统会自动删掉重复的元素。...
2018-09-07 18:18:52
309
原创 【Python】dict
Python中的dict类似C++中的map,每个元素有key,以及对应的值。 d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } len()可以计算dict中的元素个数。 可以通过,key值读取dict中对应的值,也可以通过get()获取key对应值;这两个方法区别在于,如果key不存在,第一种方法会报错,第二种方法会返回None...
2018-09-07 17:43:09
376
原创 【C++】Mutex
学习Mutex首先需要了解互斥锁的概念,详情见之前的文章。 Mutex类就是C++中实现互斥锁的类,互斥锁有可重入和不可重入之分: mutex是不可重入的互斥锁,recursive_mutex是可重入的互斥锁; 加上上锁时间的限定后,就有了另外两个互斥锁:mutex_timed, recursive_timed_mutex,分别是可重入/不可重入的互斥锁。 互斥锁的操作有: 上锁 ...
2018-09-06 22:11:37
2451
原创 【Python】 条件语句
if语句 1. if语句中,使用四格缩进表示统一代码块,不像c中使用{}。 2. Python中也有 if...else, if...elif...elif...else这样的语句 for语句 个人觉得for语句比较抽象以及跳跃...有点不合逻辑了 L = ['Adam', 'Lisa', 'Bart'] for name in L: print name 1. for...
2018-09-06 15:00:08
312
原创 【Python】 List和tuple
List的建立方法很简单:L = ['Adam', 'Lisa', 'Bart'],也可以通过下标访问 append()可以在List末尾添加元素 insert()可以在任意位置添加元素 pop()可以删除List中任意位置的元素 tuple也是数组的一种,与List区别在于,它一旦创建,就不能被修改,不能添加删除。写法上用()代替了[]。 t = (0,1,2,3,4,5,6,7...
2018-09-06 10:36:39
235
原创 【Python】 变量
1. 与C++不同,变量前面无须加类型 2. 字符串需要用 '' '' 或者 ' ' 括起来; / 表示转行; ''' ''' 可以表示连续换行;Unicode字符串可以表示中文,要在字符串前加u 3. 整整之间的运算,结果是整数;浮点数之间的运算,结果是浮点数;整数浮点数混合运算,结果是浮点数。 4. 布尔:Python把0、空字符串''和None看成 False,其他数值和非空字符串都...
2018-09-06 10:07:45
232
原创 【C++】纯虚函数、虚函数、普通函数的继承
这三种函数的使用区别如下: 纯虚函数:只提供一个接口,具体实现方法需要派生类自己去重载。 由于纯虚函数的出现,基类变成了一个抽象类,只能被继承,而不能被实例化;纯虚函数的话,必须在派生类中重载。所以纯虚函数只提供一个方法的接口,实现方式需要派生类自己去写。 虚函数:提供接口,并提供默认的实现方法;派生类也可以根据需要自己去重载。 这就是说,虚函数提供默认的实现方法,如果派生类自己不重载它的...
2018-09-06 09:53:34
8969
1
转载 【TCP/IP协议】epoll
自己来试着总结下select与epoll的区别: 在阻塞模式下,select会不断查询内核,看有没有事件触发,如果有的话,会返回事件数组;接着读写函数会,依次查看事件数组,看看是哪个事件触发,继而对其进行读写。 epoll的话,会直接返回事件数组中被触发的时间,读写函数无须依次查看所有时间,直接去读写那个触发的事件就好。 -----------------------------------...
2018-09-05 10:07:06
319
转载 【C++】 线程的互斥与同步
同一个进程的线程共享进程内的绝大部分资源,当一段访问这些共享资源的代码块,有可能被多个线程执行时,那么这段代码块就称为临界区。 当有多个线程并发的在临界区执行时,程序的执行结果会出现不确定性,这种情况称之为竞态条件。 多线程编程中,避免出现竞态条件的一项重要解决方案就是,保证多个线程在临界区是互斥的。所谓的互斥,就是指不能同时有多于一个线程进入临界区。 保证临界区互斥的重要技术,就是互斥锁。 互...
2018-09-02 22:09:48
1536
原创 【C++】 线程的创建和结束
线程的创建用的函数是pthread_create,用到的库是pthread。 成功会返回0,失败返回错误码。thread是输出,输出的是线程句柄,其实pthread_t代表的就是创建的线程的ID。 统一进程内的线程,除了栈区是特有的,其他区域都是共享的。 线程的终止分为主动终止和被动终止。...
2018-09-02 21:15:31
2286
原创 【TCP/IP协议】socket套接字
1. Socket 之前讲过TCP/IP各层的定义,基于套接字的编程处在传输层和应用层的中间。Socket能够兼容多种网络协议,最常见的是TCP/UDP。 下面是使用scoket编程,客户端与服务器端TCP连接的整个过程: 注意看每个状态下的括号里的就是程序中具体用到的函数,而具体程序中,客户端和服务器端是这样调用这些函数的: 客户端创建套接字(socket),与服务器端进行连接(...
2018-08-30 11:15:26
2166
原创 【C++】makefile
makefile用途: makefile文件帮助我们记录了整个项目工程的所有需要编译的文件列表,这样我们在编译时仅需要输入简单的make命令就能编译出我们期望的结果 makefile文件反映了整个项目中各个模块的依赖关系,这样我们改动了某些源文件后,仅需简单的输入make命令,make工具就会根据makefile文件里描述的依赖关系帮助我们分析哪些模块需要重新编译,并执行相应的操作。 make...
2018-08-27 23:22:24
438
原创 【数据库】MySQL以及SQL简介
MySQL是一个数据库管理系统,目前属于Qracle公司。它的特点是体积小,速度快,总体拥有成本低,代码开源,目前被中小型公司都拿他作为网站数据库。 SQL全称是结构化查询语言,是查询数据库用的一种语言。 1. SQL语言的约束分类: 约束类型: 主键 默认值 唯一 外键 ...
2018-08-23 09:51:47
282
原创 【C++】OpenCV实现对运动目标的追踪
用到的三个知识点: 1. 反向投影 简单来说,将图像转化一下,每个位置的像素点的值改为,所有像素值位于该点像素值对应的区间内的像素点的个数! 灰度图像...
2018-08-22 23:02:21
4003
原创 【C++】指针与引用的区别
先说原理: 指针是一个内存中的实体,它的存储对象是它指向的对象的地址; 引用并不是一个实体,它只是另一个变量的一个别名。 根据原理的不同,他们有不同的特性: 1、指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。 2、引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要初始化,并且指向的空间可变。(注:不能有引用的值不能为NULL) 3、有多...
2018-08-21 09:36:11
369
原创 【C++】面向过程中的static
全局静态变量: 相比于全局变量,全局静态变量只在定义它的源文件中才可以调用!在其他源文件(.cpp)调用会报错。 在其他源文件中,要是想调用这个全局静态变量,只能是在定义该全局静态变量的源文件中,创建一个返回值为该全局静态变量的函数,完了在其他源文件中调用这个函数。 局部静态变量: 1. 相比于局部变量,局部静态变量只能在定义它的函数内部被调用!在定义它的函数之外或者其他源文件都不能...
2018-08-13 21:27:09
195
原创 【C++】面向对象中的static
静态数据成员 静态数据成员静态数据成员不依赖于对象,而取决于类,也就是说: 静态数据成员在类创建时候就有了,而普通数据成员在类实例化之后才创建,并且,实例化多少个类,就会产生多少个普通数据成员,但静态数据成员永远只有一个(值是可能变的,取决于你怎么用它)。 另外静态数据成员的初始化要在类外进行。 静态成员函数 是用来调用静态成员函数的,不能调用非静态成员或非静态成员函数!! ...
2018-08-10 19:46:04
263
原创 【C++】友元函数/友元类
友元函数: 全局友元函数:类中的函数申明为全局友元函数后,在main中可以访问这个函数; 成员友元函数:类中的函数申明为某个友元的友元函数后,在这个类中可以访问这个函数。 友元类: 在类中可以申请,某个类是自己的友元,然后这个类就可以访问自己的成员函数与对象成员了 ...
2018-08-10 19:28:22
267
原创 【C++】RTTI
如果我有一个父类 Flyable,还有两个子类 Bird和Plane,有一个函数 doSomething,它的形参是一个Flyable指针,如果我想在程序中判断,这个指针指向的到底是Bird还是Plane,那我可以用typeid来判断,判断过后还可以用dynamic_cast,把这个指针转化为相应类型。 ...
2018-08-09 23:13:27
237
原创 【算法】链表算法题思路
做了很多链表相关的算法题,感觉解题思路不外乎下面三种: 1. 一快一慢双指针 比如,倒数第k个节点问题,判断有环链表的入环节点 2. 使用栈结构 比如, 3. pre,cur,next三指针同时出击。 比如,链表翻转问题...
2018-08-07 10:05:47
634
原创 【C++】抽象基类和纯虚函数
抽象基类和纯虚函数 不能被实例化的基类被称为抽象基类,这样的基类只有一个用途,那就是用它来派生出其他类,可使用纯虚函数的声明来创建纯虚函数。纯虚函数在虚函数表中不指向任何函数成员。 值得注意的是:声明抽象基类后 1. 派生类必须声明相应的方法;2. 不能再对这个基类实例化 附上一个Shape, Circle,Triangle的例子: 【C++】RTTI 如果我有一个...
2018-08-05 20:08:19
1618
原创 【数据结构】二叉树算法题思路
首先需要做到掌握三种常规遍历(前、中、后)以及按层遍历,几乎所有的算法题都逃不开这三种方法。 其次,做二叉树题目,很多情况都可以使用递归的方法来做,要经常想这个。 举例: 1. 二叉树镜像问题 2. 二叉树找子树问题...
2018-08-04 18:09:51
596
原创 【数据结构】二叉树
基本概念: 遍历的前中后是相对根节点来说的: 平衡二叉树: 一棵树的所有子树都满足:左右子树的深度差不超过1,就是平衡二叉树 搜索二叉树: 一棵树的所有子树都满足:头结点比所有左边节点要大,比所有右边节点小。 特性:搜索二叉树中序遍历的结果一定是,从小到大的序列;一个二叉树的中序遍历结果是从小到大的,那它也一定是搜索二叉树。 平衡二叉树和搜索二叉树详解: http://...
2018-08-01 17:11:19
227
原创 【C++】深拷贝和浅拷贝
之前介绍过,在实例化对象时,如果想要拷贝一个已经存在的对象给新的对象,那么就会调用这个类的拷贝构造函数。 浅拷贝:只是简单拷贝地址。 深拷贝:将数据成员中的地址与地址指向的数据都拷贝过来。...
2018-07-31 16:40:54
384
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅