自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

代码黑洞

做一个无聊的人,写代码、写代码、写代码。

  • 博客(125)
  • 资源 (9)
  • 收藏
  • 关注

原创 C接口的封装和设计

导出和导入DLL环境:win10, Visual Studio 2017首先打一个简单的测试环境,这里我们采用的隐式链接//.h文件#pragma once#ifndef _INC_TEST_H#define _INC_TEST_H#ifdef __cplusplusextern "C"{#endif //初始化 int init(void **handle/*out*/); //发送数据 int sendData(void *handle/*in*/,

2020-09-01 13:17:46 1370

原创 结构体类型和在开发中的应用

c语言是面向过程的,没有类这个概念,因此结构体充当了类。struct Test{ char name[32]; int age;};结构体是一种构造数据类型 把不同类型的数据组合成一个整体——自定义数据类型 定义结构体定义结构体变量的方法有很多种,一般使用下面两种。struct Person{ char name[32]; int age;};typedef struct tag_Person{ char name[32];

2020-08-28 14:10:34 291

原创 字符串-字符数组和字符串常量

字符串基本操作初始化char buf1[] = {'a','b','c','d','e'};//默认元素个数char buf2[4] = {'a','b','c','d'};//指定元素个数char buf3[4] = {'a','b'};//指定4个元素,其余两个自动补0用字符串来初始化数组char buf1[] = {'a','b','c','\0'};char buf2[] = {"abcdefg"};char buf3[] = "abcdefg";char buf4

2020-08-27 13:56:09 1014

原创 对指针概念的强化

指针是一种数据类型间接赋值是指针存在的最大意义int a = 10;int *p = &a;指针也是一种变量,占有内存空间,用来保存内存地址 *p通过地址(p变量的值)找到一块内存,然后操作内存,*p在等号左边为赋值,在右边为取值 指针变量和它指向的内存块是两个不同的概念,给p赋值只会改变指针变量的值(地址),不会影响所指的内容,给*p赋值会改变所指的内容,不会影响指针变量的值(地址) 指针也是一种数据类型,例如int *p是指向了一个int类型的内存空间。指针的内存大小都是4

2020-08-26 16:31:02 131

原创 对内存四区的再强化

开始前先提出两个问题:数据类型和内存有什么关系? 为什么会有数据类型这个概念? 数据类型的本质数据类型是固定大小内存块的别名 数据类型的作用是给编译器分配的内存空间大小 可以通过sizeof(int *)来获得数据类型得大小 数据类型可以有别名,数据类型也可以自定义(typedef)数据类型的封装void “无类型”,void * “无类型指针” void *可以指向任何类型的数据 数据类型的封装,例如内存操作函数 memcpy和memset的函数原...

2020-08-26 13:49:25 206

原创 设计一个数组模板类,完成对int、char、Teacher、Teacher*数据类型操作

模板类中应该包括:构造函数、析构函数、拷贝构造函数、重载[]、=、<<操作符//MyArray.h#pragma once#pragma warning(disable : 4996)#include <iostream>using namespace std;template <typename T>class MyArray{ fri...

2020-06-29 17:50:55 1014 2

原创 解决 VS Code输出字符串乱码问题

首先明白VSCode其实调用的是cmd,我们需要修改的是cmd的编码格式,我们可以使用chcp命令查看当前编码格式。chcp 65001 UTF-8编码 chcp 936 GBK编码查了网上的方法,有的只能修改一次,怎么固定编码格式呢。在注册表中增加一个字符串值就可以固定cmd的编码格式了。win+r键 调出在注册表中找到目录:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor增加一个字符串值autorun.

2020-05-28 11:31:50 4292 3

原创 计算机网络——传输层(TCP/UDP)

在传输层有两个协议:TCP协议:需要将要传输的文件分段传输,建立会话,可靠传输,需要流量控制(大型文件传输,视频传输)UDP协议:一个数据包就能完成数据通信,不用分段,不需要建立会话,不可靠传输,不需要控制流量(QQ聊天,屏幕广播,多播)传输层协议和应用层协议之间的关系端口是什么常见的应用层协议使用的端口http = TCP+80 https = TCP+443 RDP = TCP+3389 ftp = TCP+21 共享文件夹 = TCP+445 SMTP = TC.

2020-05-18 17:22:12 434

原创 设计模式

设计模式是什么在一定环境中解决某一问题的方案,也就是说在一定的环境下,使用固定的套路来解决问题。设计模式,如同名称一样是一套反复使用、多数人知晓、经过分类、代码设计经验的总结,是一种相对成熟的模式。为什要学习设计模式学习设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性。设计模式的分类可以归纳为三大类:创建型模式、结构型模式、行为型模式。创建型模式(用来处理对象的创建过程)工厂方法模式:定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 抽象工厂模式:

2020-05-16 22:01:13 116

原创 单例模式

单例模式是一种对象创建模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。保证一个类只有一个实例,同时提供能对该实例访问的全局访问方法。为什么使用单例模式多线程之间,比如初始化一次socket资源 比如servlet(是使用 Java 语言编写的运行在服务器端的程序。),共享同一个资源或者操作同一个对象。 在整个程序空间使用全局变量,共享资源 大规模系统中,为了性能的考虑,需要节省对象的创建时间等等 ...

2020-05-16 20:59:54 129

原创 C语言-排序算法

理解排序在排序算法中关键步骤涉及到元素的比较和交换,让无序的数据元素按照规定排列成有序的数据过程。内排序——涉及数据量少,整个排序过程不需要外存便能完成。外排序——涉及数据量大,不能一次性读取到内存中,需要时从外部一部分一部分调用。时间性能——关键性能差异体现在比较和交换的数量。辅助存储空间——在考虑排序的性能时,必要时可以“空间换时间”。算法的复杂度——排序算法的复杂度影...

2020-04-13 17:34:04 267

原创 二叉树

二叉树理解n(n>=0)个结点的有限集合,由一个根结点和两个互不相交的子结点,左子树和右子树组成的树形结构。 二叉树的性质在二叉树的第i层上至多有2^(i-1)个结点(i>0) 如上图第3层有 结点数:2^(3-1) = 4 具有n个结点的完全二叉树的深度必为log₂n+1 如上图有结点7个 深度:log₂7+1 =...

2020-04-10 14:56:47 1123

原创 C语言-队列queue顺序存储和链式存储

理解队列队列是一种特殊的先进先出的线性表,队列的操作只能在队头和队尾操作,即队尾插入数据,队头取数据。 队列的顺序存储队列的顺序存储类似线性表的顺序存储//SeqQueue.h#pragma oncetypedef void SeqQueue;//创建队列SeqQueue* SeqQueue_Create(int capacity...

2020-04-03 14:14:01 336

原创 C语言-栈tack顺序存储和链式存储

理解栈tack栈也是一种特殊的线性表,栈的工作原理是先进后出,因此在对栈操作时只能在栈顶操作。栈的插入操作,叫作入栈(压栈),栈的删除操作,叫作出栈(弹栈)。 栈的顺序存储选择尾部压栈和弹栈时,不会涉及到数组元素的大量移动。 栈的链式存储选择在链表头部入栈和出栈时,减少了数组元素的大量移动注意:在栈的...

2020-04-03 11:37:48 255

原创 C语言-双向链表

理解双向链表和单链表类似,单链表是结点只包含了指向下一个结点的后继指针域,而双向链表的结点增加了一个指向前驱的指针域。这样以来方便从某一结点开始,方便访问前一个结点和后一个结点。 双向链表的插入分析一般插入: 添加辅助指针current和next。current的后继指针指向插入结点node...

2020-04-03 10:16:48 249

原创 C语言-线性表链式存储(循环链表)

理解循环链表单链表和循环链表的区别在于,尾部结点的后继指针是否指向头部结点。相对于其他功能基本相似。循环链表的插入分析普通插入:例如pos = 2,和单链表是一样的尾插法:辅助指针向后跳lenght次,指向链表最后元素,单链表支持尾插法头插法:插入第一个元素时,当链表中有其他元素时插入头部时插入第一个元素时当链表中有其他元素时插入头部时...

2020-04-02 14:37:38 266

原创 C语言-线性表链式存储(单链表)

理解链式存储为了表示数据元素与直接后继数据元素的关系,每个数据元素除了保存自己的信息之外,还需要存储直接后继的信息。那么我们应该怎么做呢?首先我们应该在每个数据结点中包含一个指针域(存储直接后继结点的头部地址)。 头部结点:链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息数据结点:链表中的数组元素结点,包含...

2020-04-01 16:12:22 320

原创 C语言-线性表的顺序存储结构

线性表线性表是0个或多个类型相同的数据元素的集合,这些元素是有限的顺序存储的。一个线性表有哪些具体的操作,在程序中的表现为一组函数创建线性表销毁线性表清空线性表将元素插入线性表将元素从线性表中删除获取线性表中某个位置的元素获取线性表的长度

2020-03-02 22:33:56 669

原创 类模板(泛型编程)

什么是类模板类似函数模板,淡化数据类型,使用通用数据类型的模板。对仅成员数据类型不同的类的抽象,比如,有两个或多个类,其功能是相同的,仅仅是数据类型的不同,那就可以声明为类模板。一般形式:template <typename 参数名1,typename 参数名2,...>template<typename T>class Test{ Test(...

2020-02-25 12:48:19 476

原创 函数模板(泛型编程)

函数模板什么是函数模板实际上是一种通用函数,其函数类型和参数类型不具体指定,用一个虚拟的类型来表示。这样的通用函数就是函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需要在模板中定义一次即可。在调用函数时系统会根据调用的实参类型来取代模板中的虚拟类型,从而实现不同函数的功能。为什么要有函数模板当开发中需要对多种类型做相同机制的操作时,函数模板可以减少...

2020-02-25 11:33:54 219

原创 纯虚函数和抽象类

什么是纯虚函数纯虚函数是一种特殊的虚函数,前面分析过虚函数,虚函数是virtual修饰的类的成员函数,可以有实现。而纯虚函数也和虚函数一样,用virtual来修饰的类的成员函数,但是只能有函数体不能有具体实现。一般格式:class <类名>{ virtual <类型><函数名>(<参数表>) = 0; ...}1...

2020-02-24 16:42:33 766

原创 继承与派生

什么是继承面向对象中的一个概念。比如汽车是属于交通工具这个类别中的一种,那么就把汽车称为是交通工具的子类别,而交通工具称为汽车的父类别,这样他们之间就属于继承关系。这种继承关系使得子类具有父类的各种属性和方法,而不需要再编写或改变相同的功能。同时在子类中可以增加属于自己的属性和方法来完成自身功能需求和覆盖父类中原有的属性和方法,得到与父类不同的功能。基本语法:class 子类名:父类名表 ...

2020-02-22 18:11:17 157

原创 智能指针思想(简单了解)

什么是智能指针是C++的一个类模板,用对象去管理指针,想一想之前在使用指正的过程中,经常会出现内存泄漏和内存多次释放的问题,而智能指针使我们在项目开发中代替了C语言中原生的指针,保证开发更安全,更高效。例如 boost库的智能指针为什么要使用智能指针智能指针就是用来管理一个指针,在使用指针的过程中我们都遇到过,指针导致的内存泄漏和内存的多次释放,而智能指针可以很大程度上避免这些问题,它...

2020-02-21 23:25:28 305

转载 Unity3D模型制作规范(转载)

unity3D模型制作规范一.单位,比例统一在建模型前先设置好单位。在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序须要缩放也能够统一调整缩放比例。统一单位为米。二.模型规范⒈全部角色模型最好站立在原点。没有特定要求下,必须以物体对象中心为轴心。⒉面数的控制。移动设备每一个网格模型控制在300-1500个多边形将会...

2020-02-20 12:28:08 1518

原创 STL综合案例

/*1)某市举行一场演讲比赛,共有24个人参加,按参加顺序设置参赛号。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。2)比赛方式:分组比赛第一轮分为4个小组,根据参赛号顺序依次划分,比如100 - 105为一组,106 - 111为第二组,依次类推,每组6个人,每人分别按参赛号顺序演讲。当小组演讲完后,淘汰组内排名最后的三个选手,然后继续下一个小组的比赛。第二轮分为2个小组,每组6人,每个人分...

2019-12-18 17:56:49 132

原创 for_each算法和transform算法的区别

for_each: 用指定函数依次对指定范围内所有元素进行迭代访问,可对容器的元素进行修改。 transform: 与for_each类似,遍历所有元素,可对容器的元素进行修改。class PrintElem{public: void operator()(int &e) { m_n++; cout << e << " "; } ...

2019-12-12 16:32:30 230

原创 STL的容器算法迭代器的设计理念

STL的容器通过类模板技术,实现数据类型和容器模型的分离。 STL的迭代器技术实现了遍历容器的统一方法;也为STL的算法提供了统一性 STL的函数对象实现了自定义数据类型的算法运算。 具体例子:transform算法的输入,通过迭代器first和last指向的元算作为输入;通过result作为输出;通过函数对象来做自定义数据类型的运算。...

2019-12-11 14:35:30 117

原创 预定义函数对象和函数适配器

预定义函数对象算法函数对象加法:plus<Types>减法:minus<Types>乘法:multiplies<Types>除法divides<Tpye>求余:modulus<Tpye>取反:negate<Type>关系函数对象等于equal_to<Tpye>不等于not_equal_t...

2019-12-11 13:59:21 115

原创 在set集合中使用二元谓词(编译器错误 C3848)

案例:在set集合中插入小写字母,通过find去查找,而find函数区分大小写。因此需要通过仿函数来解决struct NoDistincyion{ bool operator()(const string &str1,const string &str2) { string str1_; str1_.resize(str1.size()); transfor...

2019-12-10 16:11:13 320 4

原创 一元函数对象、一元谓词、二元函数对象、二元谓词

一元函数对象:函数参数1个二元函数对象:函数参数2个一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式,谓词可以是一个仿函数,也可以是一个回调函数。二元谓词 函数参数2个,函数返回值是bool类型之所以给返回布尔类型的函数对象专门命名,是因为谓词是用来为算法判断服务的。一元谓词template <typename T>class IsDiv...

2019-12-03 10:55:02 929

原创 函数对象和普通函数

函数对象:重载函数调用操作符operator()的类,其对象常称为函数对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。(一元函数对象)template <typename T>class PrintElement{public: void operator()(T &t) { cout <&l...

2019-12-02 16:25:37 518

原创 容器认识提高

1、容器中缓存了用户的节点2、节点的类要保证节点能够插入到容器中,一般节点类需要提供无参构造函数、拷贝构造函数、重载operator=操作符3、容器是值语意,而非引用语意 ,容器执行插入操作时,内部执行拷贝动作,所以stl容器中存储的元素必须能够被拷贝。4、出现指针变量时要考虑到避免野指针的出现,因此类的内部必须提供拷贝构造函数和重载等号(operator=)操作符。5、除了que...

2019-11-21 13:55:39 104

原创 Map和multimap容器

1、map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。2、map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。3、map的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比vector快。4、map可以直接存取key所对应的value,支持[]操作...

2019-11-15 18:09:05 141

原创 Set和multiset容器

1、set是一个集合容器,其所包含的元素是唯一的,元素按顺序排列,不支持在指定位置插入元素,不可以直接存取元素。2、multiset与set的区别:set容器中元素唯一,而multiset支持中支持同一值出现多次。3、不可以直接修改set或multiset容器中的元素值,因为该类容器是自动排序的。如果希望修改一个元素值,必须先删除原有的元素,再插入新的元素。#include <s...

2019-11-15 11:29:36 136

原创 优先级队列priority_queue

此队列存在最大值优先级队列,最小值优先级队列,在开发中可以做一些特殊的应用。添加的数据会最大值优先排列或最小优先排列。#include <queue>//最大值优先队列priority_queue<int> p1; //默认是 最大值优先级队列 priority_queue<int, vector<int>, less<int> ...

2019-11-14 10:23:19 199

原创 List容器

list是一个双向链表容器,可高效的进行插入和删除元素。list不可以随机存取元素,不支持at函数与operator[]操作符。#include <list>头尾的添加移除操作list.push_back(elem); //在容器尾部加入一个元素 list.pop_back(); //删除容器中最后一个元素 list.push_front(...

2019-11-13 15:51:07 138

原创 Queue容器

queue是队列容器,它的特点是先进先出。大部分操作与之前的容器大致相同。#include <queue>push()//往队尾添加元素 front()//返回第一个元素 back()//返回最后一个元素 empty()//判断队列是否为空 pop()//从队头移除第一个元素queue对象的拷贝构造与赋值queue(const queue &que); ...

2019-11-13 10:42:39 140

原创 Stack栈模型

stack是堆栈容器,特点是“先进的元素后出”。其他操作方式参考vector容器#include <stack> push()//入栈 empty()//是否为空 top()//获取栈顶元素 pop()//弹出栈顶元素stack对象的拷贝构造与赋值stack(const stack &stk); //拷贝...

2019-11-12 18:02:46 327

原创 Deque容器

deque是双端数组,而vector是单端的。deque在接口上和vector非常相似,在许多操作的地方可以直接替换。deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。#include <deque>末尾的添加移除操作deque.push_back(e...

2019-11-12 17:18:27 178

原创 Vector容器

vector是将元素置于一个动态数组中加以管理的容器,可以随机存取,在尾部执行添加和删除时比在头部快。vector<T> vT;采用模板类实现。由于容器元素的存放是按值复制的方式进行的,在对类操作时必须提供类的拷贝构造函数,保证类对象的正常拷贝。vector对象的带参数构造vector(beg,end); //构造函数将[beg, end)...

2019-11-12 16:36:25 176

图形编程实时渲染技术详解

DirectX实时渲染技术详解 GPU精粹实时图形编程的技术技巧和技艺 实时地形引擎(DirectX 9)

2019-03-12

游戏编程模式

游戏开发一直是热门的领域,掌握良好的游戏编程模式是开发人员的应备技能。本书细致地讲解了游戏开发需要用到的各种编程模式,并提供了丰富的示例。

2019-03-12

深入理解计算机系统

这本书是非常底层的原理级书籍,涵盖了硬件汇编机器语言,CPU结构设计相关的知识,可以作为工具书参考,并不需要深入,如果没有足够时间可以忽略。

2019-03-12

3D数学基础图形与游戏开发

相对传统的复杂而又冗繁的图形学书籍,该书对3D数学的几何意义描述的清晰而又简单,做为工具书也可以作为基础学习。 对3D游戏编程非常有针对性。

2019-03-12

游戏开发中的人工智能

你的游戏是否有角色不能任意走动?是否有角色走进障碍物?是否有非玩家角色不能按照团队运动?现在你就可以掌握高级人工智能(AI)技术以解决这些问题。不管你是编程新手或者是个仅仅想快速学习AI的熟练游戏编程人员,你都会发现《游戏开发中的人工智能》对于理解并应用AI到你的游戏中是非常合适的入门书籍。

2019-03-12

UNIX网络编程

对于开发网游服务器的人开说,是本非常好的书,书中核心的学习部分还是SOCKET 套接口基本API相关的使用和注意细节,其他部分可以忽略。网络游戏服务端编程其实针对网络底层所需要的技术点并不多,因此此书只需要针对性的学习。

2019-03-12

二维码识别(编码与解码)

QRCode库是一个.NET组件,可用于编码和解码QRCode。 QRCode是源自日本的二维条形码。 ZXing 二维码识别

2019-03-12

手柄控制-XInputDotNet插件

利用XInputDotNet插件来获取手柄按键和震动,用于游戏开发当中的按键检测和反馈

2019-03-12

Unity HTTP 请求定制的插件

如果您想要一个支持REST,WebSocket,Socket.IO,SignalR,Server-Sent事件(以及更多)的请求定制的插件,通过定期更新和开发人员的出色支持,那么BestHTTP是首选!

2019-03-12

空空如也

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

TA关注的人

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