- 博客(70)
- 收藏
- 关注
原创 Git速成&常用命令&实用技巧
Git 是一个开源的分布式版本控制系统,学会使用它可以高效地处理大小代码项目。基本概念工作流程:工作区、暂存区、版本库工作区:电脑里能看到的目录暂存区:放在.git/index版本库:工作区的隐藏目录.gitmaster分支代表的目录index是暂存区HEAD是一个指向master的“指针标”objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。git reset HEAD会使暂存区内容被HEAD指向的mas
2021-09-11 13:06:53
241
原创 OC 中深拷贝和浅拷贝
OC语言中拷贝分为三类:浅拷贝,不完全深拷贝,完全深拷贝1. 浅拷贝:没有开辟新的指针地址,只是将新对象指向原来的指针,没有进行真正复制。2. 深拷贝:深拷贝分为不完全深拷贝,完全深拷贝(1)不完全深拷贝:开辟新的指针地址,但是如果copy的对象是容器类(NSArray等),容器内的元素还是原来的元素(容器内的元素指针地址指向同一块内存)。不完全深拷贝的拷贝的只是一个容器对象,只是外壳。容器内的对象只保存一份引用两个数组内的元素地址是一样的,但是两个数组本身指针地址并不一样(2)完全深拷贝:开
2020-12-06 00:24:55
425
原创 UICollectionView使用
一、视图控制器基础代码UICollectionView需要用UICollectionViewFlowLayout初始化。注册cell、header、footer以提供复用。// UserViewController.h#import <UIKit/UIKit.h>@interface UserViewController : UIViewController@property (nonatomic, strong) UICollectionView *collectionView;
2020-07-11 16:35:04
329
原创 NSURLSession使用与AFNetWorking使用
介绍iOS中的两种网络编程。NSURLSessioniOS原生网络编程:支持后台下载上传、提供全局session、下载时是多线程异步处理效率更高。使用上非常简单、创建一个请求Task然后执行。NSURLSessionTask有一些子类:NSURLSessionDataTask(发送常见的Get,Post请求)、NSURLSessionDownloadTask(发送下载请求)、NSURLSessionUploadTask(发送上传请求)1. NSURLSession发送Get请求过程:确认请求路径
2020-07-05 13:33:52
383
原创 【完整APP】SpriteKit引擎开发iOS小游戏之五(移动端网络与优化)【完结】
【网络动画效果】众所周知,包括但不限于网络处理,很多使用APP的时机都需要展示Loading或者Toast提示的形式来提升用户的交互体验。自定义Loading类:是继承UIActivityIndicatorView的子类。简化创建与管理。指定了布局与样式等。对外暴露创建与消失方法。#import "LJZLoading.h"@implementation LJZLoading- (instancetype)initWithActivityIndicatorStyle:(UIActivity
2020-06-22 23:02:14
325
1
原创 【完整APP】SpriteKit引擎开发iOS小游戏之四(服务端搭建)
【服务端总体设计】由于游戏APP中使用了账号与排行榜功能,所以需要部署服务器来完成数据管理以及处理网络请求。服务器介绍服务器选择的是阿里云服务器。弹性计算服务(Elastic Compute Service, 简称ECS)是一种简洁高效、运算效率可以弹性地伸缩,具有更多的性能与功能,更好的数据保护和可靠性。服务器需要24小时不间断运行,如果使用云服务器就会节省开支。数据库介绍腾讯云数据库MySQL(TencentDB for MySQL)为用户提供安全可靠,易于维护的数据存储服务。使用它可以达到
2020-06-22 22:23:50
689
原创 【完整APP】SpriteKit引擎开发iOS小游戏之三(游戏组件与游戏场景的实现)
【游戏组件的实现】回顾最开始的内容不难想到,我们需要封装一些游戏组件以便于在各类场景中加载和管理。SpriteKit框架下我们只需要实现SKNode的子类,或者NSObject的子类来,最终把需要的节点以合适的时机通过addChild的形式加入到SKScene场景中。游戏的地板地板部分是最简单的。我们在外部不需要考虑它的生命周期,只要封装一个创建函数即可。首先我们通过一张自己的图片初始化SKTexture类型的对象只要如下一行代码:SKTexture *terrainTexture = [
2020-06-19 22:21:28
530
原创 【完整APP】SpriteKit引擎开发iOS小游戏之二(菜单功能实现与其他视图控制器)
【主菜单视图控制器】菜单上拥有4个UIButton类型的控件,初始化它们并绑定点击的回调处理。- (void)SetUpButton{ [self CreateLoginButton]; [self CreateStartButton]; [self CreateAboutButton]; [self CreateRankButton];}- (void)CreateLoginButton{ self.LoginButton = [UIButton bu
2020-06-18 11:24:27
359
原创 【完整APP】SpriteKit引擎开发iOS小游戏之初见
【游戏系统介绍】这系列文章记录一个完整的小游戏APP实现过程。游戏“HardToReach”是对早期FlappyBird的复刻学习,在基础功能上添加了游戏道具、游戏关卡、游戏介绍、丰富的音乐和UI资源、加入了账号功能与排行榜。游戏整体系统使用B/S架构,服务端是在云服务器上运行的Python脚本,完成客户端网络请求与数据库数据交互逻辑处理。游戏本身客户端使用了双层MVC嵌套的结构,实现上用到iOS在2014年新发布的原生引擎SpriteKit,在丰富的物理世界中构建游戏组件并在上层横向构建其他VC搭建MV
2020-06-17 12:28:12
946
原创 iOS学习日记(二十二)UITableView编辑
下面要为Homepwner添加新的功能,使UITableView可以响应用户操作,包括添加删除和移动表格行。(1)编辑模式UITableView有一个名为editing的属性,如果将editing属性设置为YES,进入编辑模式,编辑模式下,可以管理表格行(添加 移动删除等)。但是不能修改行的内容。为表头视图增加按钮,通过点击按钮进入或者退出编辑模式。新建XIB文件,修改class,添加UI...
2019-09-08 12:00:31
227
原创 iOS学习日记(二十一)UITableView section 分段显示
上一篇我们说到UITableViewController中 必须实现的两个方法是这三个中,下面的两个方法。而返回1的这个方法,作用是返回section的数目,也就是表格段的个数。这一次做一个练习编写代码,使UITableView对象能够显示两个表格段: 一段显示价值大于50美元的BNRItem对象,另一段显示余下的BNRItem对象。代码修改BNRItemsViewController...
2019-09-08 09:49:13
488
原创 iOS学习日记(二十)UITableView和UITableViewController
1,创建一个UITableViewController子类在空项目中创建class 名为BNRItemsViewController#import <UIKit/UIKit.h>@interface BNRItemsViewController : UITableViewController@endUITableViewController的指定初始化方法是initW...
2019-09-06 16:57:28
223
原创 iOS学习日记(十八)视图控制器
上一节使用的方法是,把UIScrollView作为子视图添加到应用窗口中,但是更常见的做法是使用视图控制器。这一次将创建一个HypnoNerd的应用。用户可以在两个视图中自由切换,一个用于催眠自己,一个以用来设置催眠提醒时间。为了实现功能,需要创建两个UIViewController子类。 并使用一个类在两个视图之间切换。创建新项目导入上一次编写的BNRHypnosisView.m 和.h...
2019-08-30 12:38:47
155
原创 iOS学学习日记(十七)重绘与UIScrollView
本节,继续开发Hypnosister应用,当用户触摸视图时,圆形的颜色会改变。为了改变颜色,BNRHyponsister需要重新绘制自己。(1)声明一个属性,用来表示圆形的颜色在BNRHypnosister.m的类扩展部分声明属性,并在initWithFrame:方法中初始化@interface BNRHypnosister()@property(strong,nonatomic)UICo...
2019-08-28 23:01:17
176
原创 iOS学习日记(十六)视图与视图层次结构
本节,学习视图与视图层次结构的概念,并编写一个Hypnosister应用。应用只有一个界面,绘制了一系列同心圆。(1)创建项目创建a single + class 如下由于xcode8不支持空项目,所以要创建single 然后进行修改。参考如下https://blog.csdn.net/MR_ROG/article/details/41719985(2)编辑AppDelegate.m...
2019-08-28 15:38:13
298
原创 【编程练习】二叉树相关算法(二)
二叉树的第一部分算法如下https://blog.csdn.net/weixin_44611644/article/details/95897436下面是第二部分的二叉树题目(1)知道前序和中序之后,重建二叉树前序遍历的特点是第一个值为根节点,中序遍历的值是根节点在中间,利用此规律对数组进行分割归并。TreeNode* reConstructBinaryTree(vector<in...
2019-07-24 09:57:20
175
原创 【编程练习】TSP问题与最短路径
TSP暴力枚举法:此方法不适合城市个数>8的。时间复杂度成阶乘上升#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define maxx 9999int l[maxx][maxx];//存储两个城市之间的距离int n;//城市数量int...
2019-07-24 09:45:43
2876
原创 【编程练习】数据结构基础之图的深度与广度优先搜索
不多说 直接上代码吧 ,比较容易理解,如果有bug自行调试一下#include<cstdio>#define N 15 int G[N][N],int Nv; // 边数int Ne; // 顶点数bool Visited[N]; void InitVisit(){ // 初始化访问变量 for(int i=0;i<N;i++) ...
2019-07-24 09:32:26
188
原创 【编程练习】多线程编写一个存在死锁的代码
昨天的面试被这个问题挂了,平时忽略了这方面的学习,这里补一下这里的知识。多线程的基础这篇里有讲:https://blog.csdn.net/weixin_44611644/article/details/95453398或者参考c++多线程|菜鸟教程 直接搜得到。下面给出我的c++简单代码。变量x1,x2代表2个资源,值为1时相当于可以访问,值为0时代表被某一线程锁住,其他线程不能访问。#...
2019-07-24 09:04:16
550
原创 【编程练习】动态规划常规题目(经典常考重点)
1 连续子数组和时间限制:1秒 空间限制:32768K 热度指数:253787本题知识点: 数组题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,...
2019-07-15 20:28:20
485
原创 【编程练习】栈的压入与弹出模拟
时间限制:1秒 空间限制:32768K 热度指数:359923本题知识点: 栈算法知识视频讲解题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长...
2019-07-15 15:34:14
272
原创 【编程练习】数组中只出现一次的数
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { map<int ,int> cont; for(int i = 0 ; i < data.size(...
2019-07-15 15:03:34
134
原创 【编程练习】二维数组中的查找算法
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。1 最普通的查找就是循环遍历比较bool Find(int target, vector<vector<int> > array) { int hang=...
2019-07-15 09:27:43
225
原创 【编程练习】用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty()) { while(!...
2019-07-15 08:14:20
131
原创 B树、B-树、B+树、红黑树的关系
B树B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。特此说明。先介绍下二叉搜索树1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;...
2019-07-15 06:45:39
781
原创 【编程练习】出现最多的数
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。int MoreThanHalfNum_Solution(vector<int> numbers) { if(numbers.empty()) ...
2019-07-14 19:17:51
225
原创 【编程练习】字符转换数字
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入+21474836471a33输出2147...
2019-07-14 17:24:20
529
原创 【编程练习】二叉树重点算法(一)
1、二叉树的分层遍历(宽度优先搜索)2、从上往下打印出二叉树的每个节点,同层节点从左至右打印这个和第一题基本相同,依靠vector保存访问,queue队列实现遍历vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> que; queue<TreeNode*&...
2019-07-14 17:16:23
205
原创 【编程练习】链表必考重点算法
一、单链表反转LinkList Reserve_L(LinkList L){ if(L==NULL||L->next==NULL) return 0; LNode *p,*r; p=L->next;//指向第一个结点 L->next=NULL;//把头结点摘下来 while(p!=NULL) { r=p->next;//向后遍历 p->...
2019-07-14 16:35:40
196
原创 【编程练习】点集运算
时间限制:1秒空间限制:32768KP为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。输入描述:第一行输...
2019-07-12 20:32:16
896
原创 【编程练习】斐波那契数列的三种算法实现
数列说明f(n)=f(n-1)+f(n-2) (n>2)f(0)=1;f(1)=1;递归实现:#include<stdio.h>#include<stdlib.h>long long Fib(long long N){ if (N < 3) return 1; else return Fib(N -...
2019-07-12 11:59:44
569
1
原创 【编程练习】第一次只出现一次的字符串
时间限制:1秒 空间限制:32768K 热度指数:279851本题知识点: 字符串算法知识视频讲解题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).int FirstNotRepeatingChar(string str) { int len=str....
2019-07-11 19:15:48
201
原创 【编程练习】丑数
时间限制:1秒 空间限制:32768K 热度指数:286110本题知识点: 穷举题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。int GetUglyNumber_Solution(int index) { if (index <...
2019-07-11 18:42:03
223
原创 【编程练习】替换空格
时间限制:1秒 空间限制:32768K 热度指数:1032590本题知识点: 字符串题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。replaceSpace函数体和参数已给出 ,要我们实现replaceSpace的内容,完成要求。class Solution {publ...
2019-07-11 18:33:20
132
原创 【编程练习】sort()排序函数
sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!sort函数包含在头文件为algorithm的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!sort函数有三个参数:(1)第一...
2019-07-11 15:20:49
798
原创 【编程练习】常用排序算法总结
排序的定义:重新排列表中的元素,使表中元素满足按关键字递增或递减的过程。算法稳定性如果待排序表中有两个元素Ri和Rj,关键字Ri=Rj,排序前Ri在Rj前面,某一排序算法后,Ri还在Rj前面,这个排序算法就是稳定的,否则称不稳定的。排序过程中,根据数据元素是否完全在内存中,排序算法分为两类:内部排序和外部排序。一、 插入排序插入排序是一种简单直观的排序方法,其基本思想是每次将一个待排序...
2019-07-11 11:30:50
131
原创 C++标准模板库(STL)
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++ 标准模板库的核心包括以下三个组件:下面的程序演示了vector容器(一个 C++ 标准的模板),它与动态数组十分相似。#include <iostream>#include <vector>...
2019-07-11 10:32:44
245
原创 C++多线程
多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。基于进程的多任务处理是程序的并发执行。基于线程的多任务处理是同一程序的片段的并发执行。多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。下面的程序,我们可以用它来创建一个 POSIX 线程:...
2019-07-11 10:24:04
173
原创 C++多态和封装
多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。利用关键字virtulclass Shape { protected: int width, height; public: Shape( int a=0, int b=0) ...
2019-07-11 10:18:46
229
原创 C++重载
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。在同一个作用域内,可...
2019-07-11 10:07:32
627
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人