自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Unity3D 简易跑马灯系统

using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class RollingNotice : MonoBehaviour { public UILabel m_Labe...

2019-01-25 11:30:39 1994

原创 Emgu3.0 相机标定原理以及Emgu实现源码

      网上关于相机标定的实现都是基于Emgu 3.0之前的版本,我没有找到Emgu 3.0版本的实现方法,因此我特地花了两天将Emgu 3.0的实现方法贴了上来,前人栽树后人乘凉,也希望让后来者更快的熟悉Emgu 3.0版本中相机标定函数的使用方法。代码中我添加了大量的注释,方便阅读。由于时间比较仓促,代码写得并不是很规范,如果您在阅读过程中有任何的疑问欢迎私信我一起讨论,共同进步。如果这篇...

2018-04-09 10:32:18 3594 29

原创 Emgu图像通道分割、阈值处理、形态学滤波

有如下所示图一,现在只要求标注出其中水平横线,用Emgu中图像处理方法对该图片进行操作得到图二                                                                                图一                                                                       ...

2018-03-15 10:00:08 2533

原创 内存管理之含对齐功能的分配器

本文是对游戏引擎架构(Jason Gregory)这本书中第五章游戏支持系统中含对齐功能的分配器的总结。       每个变量和数据对象都有对齐要求。8位整数可对齐至任何地址,但是32位整数或浮点变量必须4字节对齐,即其地址的最低有效半字节必须为0x0、0x4、0x8、0xC。128位SIMD矢量值通常需要16字节对齐,即其地址的最低有效半字节必须为0x0。       所有内存分配器都必

2017-11-08 13:08:39 758

原创 strcpy、memcpy

strcpy函数操作的对象是字符串,完成从源字符串到目的字符串的拷贝功能。代码如下:#include char *strcpy(char *strDest, const char *strSrc) { assert((strDest!=NULL) && (strSrc !=NULL)); char *address = strDest;

2017-09-28 13:25:29 327

原创 数组中的组合问题

题目描述:给出n(0输入:第一行输入n,m第二行输入n个数,范围为[0,10^9]随后m行每行输入一个p输出:输出存在满足要求的子集的查询个数样例输入5 24 2 2 4 48 9样例输出1算法思想很简单,直接上代码#include #include #include #include #include #include #include #include us

2017-09-14 16:06:58 459

原创 二叉树问题

题目描述:给出一个由n个结点组成的二叉树,根结点编号为1,所有结点的原始颜色为白色,现在对某一个结点进行染黑操作,执行操作后,由该结点为根结点的子树所有结点染黑,请问执行操作后有多少个结点变成黑色。保证输入合法,可以构成一颗二叉树,且编号不重复,操作的结点编号在二叉树存在。保证输入顺序是二叉树的先序遍历顺序,除去根结点编号。输入:第一行输入n(0随后n-1行代表除了根结点以

2017-09-14 12:51:31 1207

转载 HTTP协议简介

HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1

2017-09-06 23:49:25 337

转载 C++类虚函数内存分布(非常重要!!!)

书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:  先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 repo

2017-08-30 13:27:11 1687

原创 map实例测试

#include<map>#include<iostream>#include<string>using namespace std;int main(){ map<string,int> simap; //以string为键值,以int为实值 simap[string("zhao")] =1; // The first pair is ("z

2017-07-19 10:57:46 418

原创 vector-STL源码及用法详解(源码面前了无秘密)

vector属于序列式容器。在C++中属于序列式容器的包含以下这些:array(C++内建)vectorheap(以算法形式呈现xxx_heap)priority-queuelistslistdequestack(配接器)queue(配接器)在C++中属于关联式容器的包含以下这些:RB-treesetmapmultisetmultimaphashtablehash_

2017-07-16 23:01:01 4992 1

原创 Linux命令:traceroute命令(路由跟踪)

traceroute是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。traceroute的原理是试图以最小的TTL(存活时间)发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。发送数据包的大小默认为38个字节。原理:程序利用增加存活时间(TTL)来实现其功能。每当数据包(3个数据包包括源地址,目的地址和包发出的时间标签)经过一个路由器,其存活时间就会

2017-07-14 17:17:26 293206 11

原创 Lua模式匹配问题

string.gsub(s,pattern,reps,n)将s中所有符合pattern的字串替换为reps,返回结果串+匹配数第1个参数:源字符串第2个参数:待替换之模式串第3个参数:替换为reps。可以是string,也可以是函数,用捕获的内容作为参数调用该函数,将返回的内容作为替换字符串,也可以是table,用捕获的内容为key去取table的值来作为替换字符串,如

2017-07-12 11:58:01 490

原创 当 Direct3D 遇上中国古诗词

在Direct3D中进行字体创建时,要用到下面的绘制文本的函数。即ID3DXFont::DrawText的调用下面看一下这个函数的原型:INT DrawText( [in] LPD3DXSPRITE pSprite, [in] LPCTSTR pString, [in] INT Count, [in] LPRECT pRect, [in] DWORD Format, [in]

2017-06-30 15:04:22 615

原创 字符串的全排列和组合算法(扩展:八皇后问题)

一、字符串的全排列题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba。算法思想: 我们现在来看这个例子,分为如下三组:a b c——a c bb a c——b c ac b a——c a b我们求整个字符串的排列,可以看成两步:首先求所有可能出现在第一个位置的字符,即把第一个字符

2017-06-26 09:43:26 1555

原创 复杂链表的复制

题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。结点定义如下:struct ComplexListNode{ int m_nValue; ComplexListNode*

2017-06-22 10:51:37 287

原创 广度优先遍历二叉树(从上到下遍历二叉树)

问题描述:从上到下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如下图中的二叉树 ,则依次打印出8,6,10,5,7,9,11思路分析:按层打印的顺序决定了应该先打印根节点,所以我们从树的根节点开始分析,为了接下来能够打印值为8的结点的两个子结点,我们应该在遍历到该结点时把值为6和10的两个结点保存到一个容器里,现在容器内就有两个结点了。按照从左到右的打印,我们先取出值为6的结点,打

2017-06-15 14:40:57 1076

原创 栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。例如序列1,2, 3, 4,5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。算法思想:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压

2017-06-14 16:14:26 353

原创 顺时针打印矩阵(图文详解,代码详细注释)

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则打印出数字:1 2 3 4 8 12 16 15

2017-06-13 22:22:46 4108

原创 二叉树的镜像

求一颗树的镜像的过程:我们先前序遍历这棵树的每个节点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子节点的左右子节点之后,就得到了树的镜像。代码如下:void MirrorRecursively(BinaryTreeNode* pNode){ if(pNode==NULL) { return; } if(pNode->m_pLeft==NUL

2017-06-13 10:59:54 239

原创 树的子结构问题

题目:输入两颗二叉树A和B,判断B是不是A的子结构算法思想很简单:首先在A中找到和B的根节点的值一样的节点R,然后再判断树A中以R为根节点的子树是不是包含和树B一样的结构。bool HasSubTree(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2){ bool result=false; if(pRoot1!=NULL && pRoo

2017-06-13 10:32:25 290

原创 合并两个排序的链表

程序算法思想很简单,不作过多的介绍,直接上核心代码:typedef struct ListNode{ int m_nValue; ListNode* m_pNext;};//递归解法ListNode* Merge(ListNode* pHead1,ListNode* pHead2){ if(pHead1==NULL) { return pHead2

2017-06-12 21:38:43 253

原创 调整数组顺序使奇数位于偶数前面

算法思想很简单: 我们定义两个指针,第一个指针初始化时指向数组的第一个数字,它只向后移动。第二个指针初始化时指向数组的最后一个数字,它只向前移动。在两个指针相遇之前,第一个指针总是位于第二个指针的前面。如果第一个指针指向的数字是偶数,第二个指针指向的数字是奇数,则交换这两个数字#include<iostream>using namespace std;void ReorderOddEven(i

2017-06-12 11:08:07 270

原创 打印1到最大的n位数

题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的999。这道题目看着很简单,最简单的思想就是先求出最大的n位数,然后用一个循环从1开始逐个打印,代码很简单:void Print1ToMaxOfNDigits_1(int n){ int number=1; int i=0; while(i++<n) { number

2017-06-07 16:29:04 334

原创 二进制中1的个数

请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此,如果输入9,该函数输出2。下面介绍三种解法,并分析优缺点:解法一:先判断整数二进制表示中最右边一位是不是1.接着把输入的整数右移一位,此时原来处于从右边数起第二位被移到最右边了,再判断是不是1,这样每次移动一位,直到整个整数变成0为止。现在问题变成了怎么判断一个整数的最右边是不是1。只要把

2017-06-01 22:42:01 290

原创 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。算法思想:我们用两个指针分别指向数组的第一个元素和最后一个元素。按照题目中旋转规则,第一个元素应该是大于或者等于最后一个元素的(这其实不完全对,还有特例,后面再加以讨论)。接着我们可以找到数

2017-05-31 23:24:17 494

原创 快速排序详解

快速排序的描述:分解:数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元素都小于等于A[q],A[q+1..r]中的每一个元素都大于等于A[q]。其中,计算下标q也是划分过程中的一部分解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]进行排序。合并:因为子数组都是原址排序的,所以不需要合并操作:A[p..

2017-05-25 15:01:55 393

原创 用两个队列实现栈(C++模板)

这个可以和上一篇文章<<用两个栈实现队列>>对比着来学习。算法思想很简单,直接上代码吧:#include<iostream>#include<queue>using namespace std;template<typename T> class CStack{private: queue<T> q1; queue<T> q2; int nCount;public:

2017-05-24 13:59:01 348

原创 用两个栈实现队列(C++模板)

题目:用两个栈实现一个队列。队列的声明如下,清实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。思想很简单,直接上代码:#include<iostream>#include<stack>#include<exception>using namespace std;template<typename T> class Cqueue{

2017-05-24 10:57:07 332

原创 重建二叉树以及树的遍历

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的头结点。在介绍算法之前,首先讲解一下树的几种遍历方式:1.前序遍历:先访问根节点,再访问左子节点,最后访问右子节点。2.中序遍历:先访问左子节点,再访问根节点

2017-05-23 21:19:52 301

原创 将字符串中的空格替换,时间复杂度为0(n)解法

题目:实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出”We%20are%20happy.”题目很简单,直接上代码#include<iostream>using namespace std;void Replace(char string[],int length){ if(string==NULL || length<0) {

2017-05-22 15:32:47 832

原创 二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。例如下面的二维数组就是每行,每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。1 2 8 9 2 4 9 12

2017-05-22 10:55:18 326

原创 单例模式(C++版)

单例模式最初定义出现在《设计模式》(艾迪生维斯理,1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),

2017-05-22 09:27:18 336 1

原创 剑指offer面试题之赋值运算符函数

题目:如下为类型CMyString 的声明,请为该类型添加赋值运算符函数class CMyString{ public: CMyString(char* pData=NULL); CMyString(const CMyString& str); ~CMyString(); private: char* m_pData;};此时应该注意如下几点:1.返回值

2017-05-18 14:55:35 320

转载 哈希表算法实现

1、什么是Hash?Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。HASH

2017-05-17 21:31:12 418

原创 微软编程题之找出数组中唯一出现两次的数

假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?方法一:使用辅助存储方式使用hash存储方式,以1到1000作为hash表的索引,遍历原数组,统计

2017-05-17 20:31:15 640

原创 经典算法--字符串倒置

这个就很简单了,直接发代码吧!#include<iostream>#include<string>using namespace std;string reverse(string s){ for(int i=0,j=s.length()-1;i<j;++i,--j) { char c=s[i]; s[i]=s[j]; s[j]=c

2017-05-16 14:14:54 1697

原创 KMP 算法图文详解

1、暴力匹配算法假设我们现在面临这样一个问题,有一个文本串 S 和一个模式串 P,现在要查找P在S中的位置,那么应该如何查找呢?我们很容易就想到暴力匹配的方法,假设现在文本串S匹配到 i 位置,模式串 P 匹配到 j 位置,则有:1.如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;2.如果失配(即S[i]! = P[j]),令i = i - (j - 1)

2017-05-16 10:53:35 3618

原创 在一个已排序的循环链表中插入节点

这个比较简单,直接上代码了typedef struct ListNode{ int data; ListNode *next;}ListNode;void sortedInsertNode(ListNode *head,ListNode *newNode){ ListNode *cur=head;//把头结点设置为当前节点 //case 1: 该链表为空

2017-05-12 14:40:23 465

原创 单链表倒置问题

数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性。但数组也同样存在一些弊病。如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个大小的数组,有时需要5 0个数组的大小, 难于统一。我们只能够根据可能的最大需求来定义数组,常常会造成一定存储空间的浪费。 我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要。链

2017-05-11 16:19:23 1888

空空如也

空空如也

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

TA关注的人

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