自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计算机图形学(2)(视图变换)

目录一.模型变换二.摄像机变换三.投影变换1.正交投影2.透视投影四.视口变换视图变换视图变换的整个过程的主要目的:为了把在虚拟世界中的物体的三维坐标转换到屏幕二维坐标系中的对应的位置上。视图变换具体分为下面四个步骤:1.模型变换:将准备拍摄的对象移动到它在虚拟场景中应该存在的位置2.摄像机变换:将摄像机(玩家观察虚拟世界的视角)移动到准备拍摄的位置3.投影变换:把当前摄像机视角之内的物体的与摄像机的相对三维坐标投影到标准二维平面上4.视口变换:把标准二维坐标对应到屏幕坐标上一.模型变换

2021-05-26 14:41:47 1050 3

原创 计算机图形学(1)(基础变换矩阵:缩放,旋转,平移)

计算机图形学与计算机视觉、数字图像处理的区别计算机图形学,输入的是结构特征数据,输出的是图像信号;计算机视觉,输入的是图像信号,输出的是结构特征数据;数字图像处理,输入的是图像信号,输出的也是图像信号。计算机图形系统的组成从计算机图形系统的功能来看组成从计算机图形系统的软件硬件来看组成...

2021-05-25 15:39:56 6218 9

原创 百度2021春实习C++软件开发一面面经

在得到百度笔试过了的消息之后,就预约了一面的面试时间,定在了28号的下午两点。但实际时间提前了一个小时,还是面试官主动找我提前面试的。上来先是一段简单的自我介绍代码考核:手撕哈希表,我用vector实现了一下,但是在处理关键字相同的地方出了点小问题。(本来是让我写一个多线程的哈希表的,但本人太菜了,不会。。。。)然后问到了项目,我介绍了一下自己在项目中的负责的部分。借由项目问到了网络,让我说一下客户端和服务端连接的过程(TCP的三次握手)。假设第三次握手,客户端没有给服务端返回确认信息,服务端会

2021-03-29 14:55:24 2792 8

原创 UE4自制水体材质及简易浮力系统

目录一. 自制水体材质1. 蓝图整体展示2. Wave Production部分细节展示及关键节点详解具体细节3. Foam Production部分细节展示及关键节点详解具体细节二. 简易浮力系统1. 蓝图整体展示2. Buoyancy Volume Initial Detection部分细节展示及关键节点详解具体细节3. Buoyancy部分细节展示及关键节点详解具体细节一. 自制水体材质1. 蓝图整体展示整个材质的制作主要分为两个大的部分,Foam Outline(泡沫轮廓)部分、 Wave

2021-12-28 19:13:10 2491 1

原创 消失的两个数字--LeetCode

题目:给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?以任意顺序返回这两个数字均可方法一:求和法思路:首先,算出如果没有缺少数字的情况下整个数组的和sum,与当前缺少数字的数组的和相减,得到缺少的两个数字的和double_sum,根据题目的要求,可得这两个数字并不相同,那么必然一个小于等于double_sum/2,另一个大于double_sum/2,然后在当前数组中再利用上述方法找到缺少较小的数,即可得出另一个较大的数。示例

2021-03-18 20:39:09 254

原创 树状数组lowbit()函数详解

lowbit()函数是用来求2进制数最低位1的位置,可以自己通过一系列位运算实现。假如有x=10,则其二进制形式为1010,使y=x-1=1001,根据此例子,可以发现当一个二进制数字减1时从其最低位1(lowbit)开始向后的每一位都与之前相反。我们再让y与x异或一次1010 ^ 1001 = 0011,可以发现从lowbit位开始往后的每一位都为1,结果记为z对于x lowbit位之前是1或者0,lowbit是1,lowbit之后全是0,对于z lowbit位之前全是0,lowbit是1,

2021-03-17 22:40:11 1409

原创 进程及进程间通信

进程基本概念程序的一个执行实例,或正在执行的程序;进程是操作系统分配资源的最小单位程序是一个静态的概念,而进程则是动态的概念。PCBPCB全称是process control block,译为进程控制块,是一种进程的属性集合的数据结构,在Linux操作系统之下,PCB是task_struct,当一个进程被执行时,它的PCB会被装到RAM(内存)中,包含关于这个进程的所有信息。PCB中的内容进程标示符:这是描述该进程的唯一标示符,与其他进程加以区分;状态:任务状态,退出代码,退出信号等;优

2020-12-16 14:56:25 128

原创 一文搞定哈希表

哈希表(Hash Table)概念不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。向该结构中插入元素时:根据待插入元素的关键码,以此函数计算出该元素的存储位置。在该结构中搜索元素时:对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中寻找此位置的元素与欲查找的元素的关键码比较,若相等则代表搜索成功上述方式即为哈希方法,此方法中

2020-09-19 17:13:00 138

原创 认识C++的单例模式

单例模式也称为单件模式、单子模式,可能是使用最广泛、最简单的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享懒汉模式特点:不用的时候不会加载配置文件,只有到用的时候才会加载,也就是加载会有延迟//定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。class Singleton {private: //构造函数私有化 Singleton() {} //指向唯一实例的静态指针M_Instance,并且

2020-09-16 22:11:25 151 1

原创 攻克红黑树

红黑树性质每个节点只有红色或者黑色两种情况根节点一定是黑色如果一个节点是红色,那么它的两个子节点一定是黑色对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点每一个叶子节点都是黑色(可以为nullptr)由上述特点可以的出,红黑树的最长路径不超过最短路径的两倍最长路径:最长的情况是红黑相间,红黑节点个数相同(节点个数=黑色个数*2)最短路径:最短的情况是只有黑色节点,与最长路径黑色节点个数相同所谓的红黑树,本身也就是双色树,颜色只是观察其特点,并不局限与红黑

2020-09-13 15:21:27 234 1

原创 红黑树的基础——AVL树

AVL树特点:前提:是一棵二叉搜索树左右子树高度之差(简称为平衡因子)的绝对值不超过1左右子树也是一颗AVL树AVL树避免了一般二叉搜索树会出现单边树的情况代码定义template<class T>//定义节点struct AVLNode { T _val; int _bf;//平衡因子 AVLNode<T>* _left; AVLNode<T>* _right; AVLNode<T>* _parent; AVLNode(con

2020-09-12 17:53:54 113

原创 解析二叉搜索树

二叉搜索树概念二叉搜索树又称为二叉排序树(可以是一棵空树)一般具有以下性质1.若左子树不为空,则左子树上的所有节点的值均小于(大于)根节点的值2.若右子树不为空,则右子树上的所有节点的值均大于(小于)根节点的值3.左右子树的结构以满足上述性质4.二叉搜索树一般不存在值相同的节点代码定义template <class T>//定义结点的结构体struct BSTNode{ T _val; BSTNode<T>* _left; BSTNode<T>

2020-09-10 11:42:47 263

原创 C++多态总结

多态概念:多种形态,完成某个具体行为,不同的对象完成时可能会有不同的效果多态:看实际指向的实体非多态:看类型例如:微信抢红包多态的定义与实现1.构成条件多态是在不同继承关系的类对象,去调用同一函数,产生不同的行为。必须通过基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。class Person {public: virtual void BuyTicket() { cout << "买票-全价" << endl

2020-09-07 10:47:05 178

原创 C++继承总结

继承的概念继承机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础之上进行其他扩展,增加功能,这样产生的新类,称之为派生类。继承呈现了面向对象程序设计的层次结构,体现了有简单到复杂的认知过程。class Person{public:void Print(){cout << “name” << _name << endl;cout << “age” << _age << endl;}pro

2020-07-30 20:23:57 385 1

原创 vector模拟实现

#include<iostream>#include<string>using namespace std;template <class T>class Vector {private: T* _start;//首元素开始的位置 T* _finish;//最后一个元素结束的位置 T* _end;//空间的结束位置public: Vector() :_start(nullptr) ,_fini

2020-06-20 21:50:15 120

原创 String类的模拟实现

#include<iostream>#include<string>using namespace std;class String {private: char* _str; size_t _size; size_t _capacity;public: //string迭代器:通过指针实现 typedef char* iterator; typedef const char* const_iterator; itera

2020-06-15 21:29:53 137

原创 C++——内存管理

示例int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = {1, 2, 3, 4}; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof (int)*4); int* pt

2020-05-30 21:41:36 203

原创 C++——日期类实现以及六大成员函数

六大成员函数构造函数**功能:**在已有空间上初始化对象成员变量1.如果没有显示定义,编译器会自动生成,如果定义了任何一个构造函数,编译器都不会再自动生成2.构造函数支持重载3.默认构造:无参、全缺省、编译器自动生成,这三者只能存在其一4.创建对象时编译器自动调用5.如果有自定义成员,构造函数会自动调用自定义成员的默认构造,如果自定义成员没有默认构造函数,编译不会通过析构函数**功能:**对象销毁之前,清理对象的资源,不是销毁对象1.如果没有显示定义,编译器会自动生成2.不支持重载,只

2020-05-26 17:40:38 435 1

原创 C++——引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。void TestRef(){ int a = 10; int& ra = a;//<====定义引用类型 printf("%d",&a); printf("%d",&ra);//与上面输出地址相同}引用特性引用在定义时必须初始化一个变量可以有多个引用引用一旦引用一个实体,再不能引用其他实体常引用void Tes

2020-05-18 21:19:45 152

原创 C++——缺省参数、函数重载

缺省参数缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。例void TestFunc(int a = 0){ cout<<a<<endl;}int main(){ TestFunc(); // 没有传参时,使用参数的默认值 TestFunc(10); // 传参时,使用指定的实参}缺省参数分类1.全缺省参数void TestFunc(int a = 10, int b =

2020-05-18 21:10:05 196

原创 C++——命名空间

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。普通的命名空间// N1为命名空间的名称namespace N1 {// 命名空间中的内容,既可以定义变量,也可以定义函数 int a; int Add(int left, int right){ return left + right; }}...

2020-05-18 20:52:22 117

原创 几种排序方法总结

交换函数//交换函数void Swap(int* array, int i,int j) { int tmp = 0; tmp = array[i]; array[i] = array[j]; array[j] = tmp;}冒泡排序时间复杂度:最坏O(n^2) 平均O(n^2) 最好O(n)空间复杂度:O(1)稳定性:稳定数据敏感:敏感void bubbleSort(...

2020-04-29 15:18:59 352 1

原创 二叉树的实现

typedef char BTDataType;typedef struct BinaryTreeNode{ BTDataType _data; struct BinaryTreeNode* _left; struct BinaryTreeNode* _right;}BTNode;// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树BTNode...

2020-04-26 20:58:46 114

原创 判断一棵树是否是平衡二叉树

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。//获取树的高度int maxDepth(struct TreeNode* root){ if(root == NULL) return 0; ...

2020-04-25 21:33:18 162

原创 二叉树的构建和遍历

二叉树定义typedef struct BTNode{ char _data; struct BTNode* _left; struct BTNode* _right;}BTNode;中序遍历void Inorder(BTNode* root){ if(root){ Inorder(root->_left); prin...

2020-04-25 21:15:43 133

原创 堆的实现及相关操作

堆:是一种特殊的完全二叉树大堆:左右孩子结点均小于父亲结点小堆:左右孩子结点均大于父亲结点用顺序表来表示堆typedef int HPDataType;typedef struct Heap{ HPDataType* _array; int _size; int _capacity;}Heap;堆的创建void heapCreat(Heap* hp,HPDataType*...

2020-04-22 10:42:22 117

原创 括号匹配问题

有效的括号难度简单1512收藏分享切换为英文关注反馈给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “...

2020-04-13 20:43:27 214

原创 用队列实现栈

解题思路:此题可以用两个队列去实现一个栈,每次始终保持一个队列为空,入栈操作相当于给非空队列进行入队操作出栈操作相当于非空队列的队尾元素出队,此时需要把非空队列除最后一个元素之外的其余元素入队到空队列,然后出队最后一个队尾元素队列相关操作:https://blog.csdn.net/Immaturecld/article/details/105441519typedef struct {...

2020-04-13 20:23:28 128

原创 用栈实现队列

解题思路:此题可以用两个栈实现,一个栈进行入队操作,另一个栈进行出队操作出队操作: 当出队的栈不为空是,直接进行出栈操作,如果为空,需要把入队的栈元素全部导入到出队的栈,然后再进行出栈操作栈的相关操作:https://blog.csdn.net/Immaturecld/article/details/105441167typedef struct { //入队栈 Stack...

2020-04-13 20:04:45 99

原创 设计循环队列

解题思路:通过一个定长数组实现循环队列入队:首先要判断队列是否已满,再进行入队的操作,入队操作需要考虑索引循环的问题,当索引越界,需要让它变成最小值出队:首先要判断队列是否为空,再进行出队操作,出队也需要考虑索引循环的问题判空: 队头 == 队尾判满: 队尾 + 1 == 队头typedef struct { int* queue; int front; int...

2020-04-13 19:46:46 110

原创 队列(链表实现)及其相关操作

队列一种特殊的表特殊之处:插入时只能在表尾插入,出表时只能在表头取出,也就是(先进先出)队列的定义(链表实现)typedef int QDataType;typedef struct QNode{ struct QNode* _next; QDataType _data;}QNode;typedef struct Queue{ QNode* _front;//头指针 Q...

2020-04-10 20:49:05 150

原创 栈(顺序表实现)及其相关操作

栈一种特殊的表其特殊之处在于,插入时只能从表尾插入,出表时也只能从表尾取出,也就是后进先出栈的定义(顺序表实现)typedef int Type;typedef struct Stack{ Type* _array; size_t _size;//当前有效元素个数 size_t _capacity;//栈的最大容量}Stack;初始化void stackInit(Stack...

2020-04-10 20:31:46 154

原创 链表插入排序

算法(升序):让一个数跟它前面的数字进行比较,直到找到第一个比它小的数字,放在这个数字的后面/* Definition for singly-linked list. struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ...

2020-04-06 15:20:21 142

原创 删除重复结点

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5ListNode* deleteDuplication(ListNode* pHead) { struct ListNode* prev, *cur, *next, *tmp...

2020-04-06 14:34:05 157 1

原创 双向链表及其相关操作

双向循环链表每一个结点都有两个指针,一个前驱一个后继,头结点的前驱指向最后一个结点,最后一个结点的后继指向头结点结构体定义typedef int Type;//结点定义typedef struct Node{ Type _data; struct Node* _next; struct Node* _prev;}Node;//链表定义typedef struct List{...

2020-04-06 13:29:42 112

原创 合并两个有序数组

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){//从后往前比较,最后结果保存在nums1中int idx = m + n - 1; while (m > 0 && n > 0){ if (nums1[m - 1] >= nums2[n - 1...

2020-04-02 17:22:43 124

原创 旋转数组

//先整体旋转void reverse(int* nums, int left, int right){ while (left < right){ int tmp = nums[left]; nums[left] = nums[right]; nums[right] = tmp; ++left; --right; }}

2020-04-02 17:05:22 123

原创 整数的数组形式和一个整数相加

解题思路:此题是用一个数的数组形式 + 一个整数, 返回和的数组形式。模拟加法进行逐位相加, 从低位向高位相加,最后整体逆置,得到最终结果每一位的值 = 对应位值的和 + 前一位的进位每一位的值计算出来之后,需要检查是否需要进位最高位计算之后,需要考虑是否还需要向上进位//数组倒置函数void reverse(int* nums, int left, int right){ w...

2020-04-02 16:58:05 890

原创 链表及相关操作

链表链表结构体的定义typedef int Type;typedef struct Node{ struct Node* _next; Type _data;}Node;typedef struct SingleList{ Node* _head; // head: 表示链表真正的头结点,即第一个有效的数据的位置}SingleList;//上面的两个结构体共同组成一个链表...

2020-04-02 16:34:28 100

原创 顺序表相关面试题

1.原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)int removeElement(int* nums, int numsSize, int val){ int* newA = (int*)malloc(numsSize * sizeof(int)); int idx = 0; for (int i = 0; i < numsSiz...

2020-03-28 20:51:06 157

空空如也

空空如也

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

TA关注的人

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