- 博客(61)
- 资源 (5)
- 收藏
- 关注
原创 协程 与 greenlet
文章目录1. 协程2. greenlet1. 协程子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别...
2019-05-04 22:31:15 373
原创 Unity StartCoroutine 协同程序
协程是轻量级线程,开启协程不等同于开启线程,即不是开启一个新的流水线。通俗点讲,对于一堆任务,通过一个线程轮着对其中每个任务都执行一下。它的厉害之处在于,每运行到一个任务的时候,它都可以从这个任务上一次中断的地方开始运行。这种工作机制类似于操作系统的线程调度。
2017-04-07 16:11:14 4697 1
原创 Unity 脚本基类 MonoBehaviour 与 GameObject 的关系
MonoBehaviour 是 Unity 中所有脚本的基类,如果你使用JS的话,脚本会自动继承MonoBehaviour。如果使用C#的话,你需要显式继承MonoBehaviour。
2017-03-27 12:55:57 33523 2
原创 Collider 详解
网格碰撞器利用 网格资源 并在其上构建碰撞器。对于复杂网状模型上的碰撞检测,它要比 基元碰撞器(boxCollider、capsuleCollider等)精确的多。标记为 Convex 的网格碰撞器才能够和其他网格碰撞器发生碰撞。
2016-11-23 13:37:45 18039
原创 Material 的 Tiling 和 Offset
在 Unity 中,新建一个材质,会要求选择使用哪个着色器,默认的是 Diffuse 着色器。确定了着色器后,在材质属性面板中,就会出现该着色器需要用到的一些属性,一般是贴图及对应的属性。
2016-11-23 11:18:00 8165
原创 map、mesh、texture、material 和 shader 的联系
map、mesh、texture、material 和 shader 的联系
2016-10-24 17:36:44 9788 1
原创 Windows 线程创建方式的比较
进行 Windows 编程时,常需要涉及多线程编程,以下是 Windows 提供的关于创建线程的3个API。
2016-07-14 13:08:53 3091
原创 new/delete 详解
new 和 delete 是 C++ 用于管理 <font color=ff00ff>堆内存</font> 的两个运算符,对应于C语言中的 malloc 和 free,但是malloc和free是函数,new 和 delete 是运算符。
2016-05-18 14:31:12 28553 2
翻译 Effect of Cache
cache 是一种快速而小的缓存设备,cache存储了最近访问的memory数据。 这种描述是相当准确的,但是如果了解 cache 工作的细节将对解程序的性能有很大的帮助。
2016-05-14 17:11:10 1542
原创 信息的表示和处理
现代计算机存储和处理的信息以二值信号表示。这些微不足道的二进制数字,或者称为位(bit),奠定了数字革命的基础。孤立的讲,单个的位不是非常有用。然而,当把位组合在一起,再加上某种 解释,即给不同的可能 位模式 赋予含义,我们就能表示任何有限集合的元素。一、数值的表示1. 1 数值的编码数值的类型主要分为2种:整数 和 浮点数。 编码的方式主要分为3种:无符号编码、补码编码 和 浮点数编码。无符号
2016-05-10 19:38:31 1001
原创 基本排序算法
冒泡排序是一种简单直观的排序算法。它重复地走访要排序的数列,每次比较两两相邻的两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。交换的目的是要把最小或者最大的值放到未排序数列部分的尾部。
2016-05-04 17:02:43 586
原创 Python的__slots__
__slots__ 用处__slots__的作用是阻止在实例化类时为实例分配dict,默认情况下每个类都会有一个dict,通过__dict__访问,这个dict维护了这个实例的所有属性。代码:# coding:utf-8class Base(object): val = 1 def __init__(self): passclass BaseSlots(object
2016-04-26 11:03:10 1540
原创 堆排序
堆排序 : 是指利用堆这种数据结构所设计的一种排序算法。堆可以视为一颗完全二叉树。堆的特点堆可以分为大顶堆和小顶堆。大顶堆 : 任一结点总是大于其左右孩子结点。所以根节点存储的将是最大值。小顶堆 : 任一结点总是小于其左右孩子结点。所以根节点存储的将是最小值。虽然堆是树的结构,但是堆可以被视为完全二叉树。根据完全二叉树的特点,通常堆是通过一维数组来存储的。因为当堆中n个元素对应数组的1-n序
2016-04-24 11:15:27 1237
原创 大位数
大位数问题:int的表示范围是 -2147483648~2147483647 。 当两个正数相加的结果大于2147483647时,将会造成越界,而得到负数的结果。为此,大位数相加时,普通的加法做法将无法满足需求。大位数加法/*大位数加法作者:Zoo时间:2016年4月20日21:19:49*/#include <iostream>#include <string.h>#include
2016-04-20 21:30:01 2246
原创 暴力枚举
题目如下:解法 11、用一个10维数组match记录 构建每个数字所需要的 火柴数。 比如match[0] = 6 : 表示构建0需要6根火柴。2、用一个二维数组res 存储 某行 + 某列 需要的火柴数目。比如: res[0][1] = 14 : 表示 0 + 1 = 1 ;这个等式需要消耗14根火柴3、定义一个结构体数组,结构体如下struct mat{ int row; //行号
2016-04-18 12:08:43 1928
原创 最短路径—flody
flody 算法的作者是罗伯特·弗洛伊德 。记得以前偶尔都能听到“弗洛伊德曾经说过。。。”的话,很好奇就百度了下,原来有多个名人都叫这名,哈哈,还有个弗洛伊德是研究心理学的。。西格蒙德·弗洛伊德算法思路用于解决任意两点间的最短路径的一种算法。算法的时间复杂度为O(n^3),空间复杂度为O(n^2)。基本思想可以通过一个类比来描述。两个城市之间的直达火车并不一定是最快的,有的时候通过转车,反而能缩短
2016-04-18 10:00:12 2521
原创 广度优先搜索
广度优先搜索算法(Breadth First Search),又称为”宽度优先搜索”或”横向优先搜索”,简称BFS。算法思路算法思想:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后再分别从这些邻接点出发依次访问它们的邻接点(邻接节点的邻接节点)。换句话说,广度优先搜索遍历图的过程是以v为起点,由近至远,依次访问和v有路径相通且路径长度为1,2…的顶点。1 无向图的广度优
2016-04-17 14:26:09 2243
原创 C++ 笔试题集锦(2)
本篇blog旨在收集平时遇到的一些“稀奇古怪”的面试题。上一篇笔试题blog地址问题1: 出现频率问题表述: 从100万url中,找到出现频率最高的100个。解析:#include <iostream>#include <fstream>#include <cstdlib>#include <string>#include <vector>#include <list>#includ
2016-04-17 11:53:15 555
原创 桶排序
桶排序,是基于不比较的排序算法。时间复杂度为O(1),空间复杂度为O(n)。算法思路按未排序数组中最大数值 maxva l,建立一个容量为 maxval + 1 的临时数组res遍历未排序数组中的每一个元素,通过res数组记录每个数值出现的次数打印res数组(数字i出现的次数为res[i])C 版本#include <stdio.h>#define MAX 13int main(){
2016-04-17 11:46:17 2334
原创 深度优先搜索
深度优先,顾名思义,只要有路,则一条路走到底,然后回溯,看之前的叉路口是否还有路可选。基本概念深度优先搜索(depth-first-search)是一种用于遍历或搜索 树或图的算法。算法思路: no picture no bb! 一图抵千言!如上是一个有向图。假设我们需要找到从1到4结点的路径。那么从结点1开始遍历,然后递归的遍历所有与1相邻的结点。所以,第一,我们需要构建图的邻接矩阵(建模很
2016-04-16 11:04:32 3020
转载 程序员的自我修养 - 操作系统
操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。进程的状态 如上图所示,进程包括三种状态:就绪态、运行态和阻塞态。详细说明如下:就绪 — 执行:对就绪状态的进程,当进程调度程序按一种选定的策略从中选中一个
2016-03-20 11:57:13 647
原创 奇思妙想位运算
本篇旨在记录”奇思妙想”的位运算。1的个数int c = 10;int count = (c == 0 ? 0 : 1) ;while( c = c&(c-1) ){ count++;}解析 c-1 会导致c最末尾的1 因为借位变为0,而此前最末尾的1后面必然全是0(或者1为个位),所以当c&(c-1)时,就相当于消去c中最末尾的一个1。 如6的二进制是0110,6-1的二进制是01
2016-03-15 23:47:34 1662
原创 C++ RTTI 机制
RTTI(Run Time Type information): 是编译器在 编译期间 生成的特殊类型信息(type_info),包括对象继承关系,对象本身的描述,RTTI 是为多态而生成的信息,所以只有具有虚函数的对象才会生成。
2016-03-11 15:00:12 2568
原创 C++ 笔试题集锦(1)
本篇Blog旨在收集平时遇到的一些“稀奇古怪”的面试题。问题1问题表述: 在C++中,为了让某个类只能通过new来创建(即如果直接创建栈上对象,编译器将报错),应该如何做?解析: 将析构函数设为私有。 因为new的过程中,编译器不会检测析构函数是否可访问,但要注意的是,这将导致不能调用delete删除该对象所占用的内存,所以需要在该类的内部自己增加一个成员函数,在该自
2016-03-09 23:15:58 6990
原创 神一般的指针
解析下列指针含义:1、 int *p;一个指向整型数据的指针。2、int **p;一个指针的指针,它指向的指针指向一个整型数据。**p 是 int 类型,所以 *p 是int *类型,即*p是一个指向int的指针,所以p是一个指向int的指针的指针。3、 int *p[10];一个有十个指针的数组,该指针指向整型数据。p[10] 的类型是 int *,所以 用type 替换 int *,也就是
2016-03-09 22:30:57 1973
原创 状态模式
在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象。模式定义 当一个对象的内在状态改变时,允许其改变行为(不同的状态,做不同的事)。状态模式主要解决的是 : 当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑,转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。UML图如下: 示例 人假
2016-03-09 16:24:42 1693
转载 C++ 对象模型
何为C++对象模型?C++对象模型可以概括为以下2部分:语言中直接支持面向对象程序设计的部分对于各种支持的底层实现机制语言中,直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等。第一部分这里我简单过一下,重点在底层实现机制。在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。
2016-03-08 14:50:53 973
原创 贪心算法
1 活动安排问题#include <iostream>#include <vector> // vector#include <iterator> //ostream_iterator#include <algorithm> //stable_sortusing namespace std;// 活动信息class Activity{public: Activity(int
2016-03-07 10:34:37 383
原创 STL算法之查找
STL算法库中提供的查找相关算法主要有以下几种: 算法 功能 find 返回第一个等价于给定值的元素的迭代器1 find函数原型:template <class InputIterator, class T> InputIterator find (InputIterator first, InputIterator last, const T& val);在 [first,l
2016-03-03 15:35:24 1371
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人