-
随意细解:UI -- UIView及其子类
2015-11-10 21:32:57window、UIView、UILabel创建window
在创建window的时候,需要指定window的⼤⼩。通常window的⼤⼩(frame)与屏幕(UIScreen)⼤⼩⼀致。这里还是使用MRC模式来练习。
重写dealloc方法:
- (void)dealloc { [_window release]; [super dealloc]; }
创建window时使用autorelease:
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible];
UIView
代表屏幕上的⼀个矩形区域,iOS中所有能看到的内容都是view或其⼦类。
创建步骤
开辟空间并初始化视图
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(120, 100, 200, 50)];
对视图做一些设置 (比如:背景颜色)
view.backgroundColor = [UIColor yellowColor];
将视图添加到window上进行显示
[self.window addSubview:view];
释放视图对象
[view release];
frame
frame是⼀个结构体,包含2部分内容:origin和size。origin也是⼀个结构体,包含2部分内容:x和y。size同样是⼀个结构体,包含2部分内容:width和height。frame的origin和size是相对于⽗视图来说的。
center
center是个结构体,包含2个部分:x和y。
center.x = frame.origin.x + frame.size.width/2;
center.y = frame.origin.y + frame.size.height/2;bounds
bounds 边界 可以控制子视图的坐标系, 默认的bounds 就是从(0,0)点开始, 改变父视图的bounds 相当于改变子视图的坐标系(也就是原点坐标), 父视图是不会发生变化,只是更改子视图的位置。
view1.bounds = CGRectMake(10, 10, 100, 30);
(子视图的原点坐标,相对来说向左移10,向上移10。word版自制图片:)
frame、bounds、center之间的联系
常用方法
insertSubview:atIndex:
在指定的index处插⼊⼦视图
示例:[superview insertSubview:View atIndex:1];insertSubview:aboveSubview:
在指定的视图上⾯添加⼦视图
示例:[superview insertSubview:grayView aboveSubview:redView];insertSubview:belowSubview:
在指定的视图下⾯添加⼦视图
示例:[superview insertSubview:grayView belowSubview:redView];bringSubviewToFront:
把指定的⼦视图移动到最前⾯
示例:[superview bringSubviewToFront:redView];sendSubviewToBack:
把指定的⼦视图移动到最后⾯
示例:[superview sendSubviewToBack:redView];exchangeSubviewAtIndex: withSubviewAtIndex:
交换两个指定索引位置的⼦视图
示例:[superview exchangeSubviewAtIndex:0 withSubviewAtIndex:2];removeFromSuperview
从⽗视图上移除
示例:[View removeFromSuperview];
重要属性
UILabel
显⽰⽂本的控件。UILabel是UIView⼦类,是能显⽰⽂字的视图。UILabel是具有特定外观特定功能的视图,侧重于⽂本的呈现。创建过程与UIview相同。
-
图像处理中,每次识别一个汉字,汉字位置及角度随意放置,要求识别出相关汉字及其角度
2019-02-15 08:33:30图像处理中,每次识别一个汉字,汉字位置及角度随意放置,要求识别出相关汉字及其角度,想问一下各位大神有没有好的方法 -
编程:随意输入10个正整数并存入数组a;编程找出数组a中所有的素数,及其下标,并按(下标,素数)格式输出...
2020-04-13 20:16:25编程:随意输入10个正整数并存入数组a;编程找出数组a中所有的素数,及其下标,并按(下标,素数)格式输出。 #include<stdio.h> int main() { int isPrime(int data); //函数声明 int t,i; int a[10] = {...编程:随意输入10个正整数并存入数组a;编程找出数组a中所有的素数,及其下标,并按(下标,素数)格式输出。
#include<stdio.h> int main() { int isPrime(int data); //函数声明 int t,i; int a[10] = {0}; for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<10;i++) { t=isPrime(a[i]); if(t!=-1) //判断是否为素数 printf("(%d,%d) ",i,isPrime(a[i])); } printf("\n"); return 0; } int isPrime(int data) //函数 { int j; for(j=2;j<data;j++) { if(data%j==0) break; } if(j==data) return data; else return -1; }
-
图的邻接表表示及其DFS遍历
2016-08-08 17:34:37图的邻接表表示及其遍历1.图的结构定义#define MAXVEX 100 #define true 1 typedef char VertexType; //定义图节点值得类型,可随意更换 typedef int EdgeType; typedef struct EdgeNode //定义边表节点 { int ...图的邻接表表示及其遍历
1.图的结构定义
#define MAXVEX 100 #define true 1 typedef char VertexType; //定义图节点值得类型,可随意更换 typedef int EdgeType; typedef struct EdgeNode //定义边表节点 { int adjvex; //存储顶点下标 EdgeType weight; //权重值 struct EdgeNode* next; //边指针 }EdgeNode; typedef struct VertexNode /*顶点表节点*/ { VertexType data; EdgeNode* firstedge; }VertexNode,AdjList[MAXVEX]; typedef struct { AdjList adjList; int numVertexes,numEdges; }GraphAdjList;
2.图的建立
void CreatGraph(GraphAdjList *g) { int i,j,k; EdgeNode *e; scanf("%d%d",&g->numVertexes,&g->numEdges);//获取顶点数和边数 char c; //gettchar(); for(i=0;i<g->numVertexes;i++) { while((c=getchar())=='\n'||c==' ');//排除空格和换行符 g->adjList[i].data = c; //获取顶点值, g->adjList[i].firstedge = NULL; //将边表置为空 } for(k=0;k<g->numEdges;k++) { scanf("%d%d",&i,&j); //输入i,j 在图中有i-->j e=(EdgeNode*)malloc(sizeof(EdgeNode)); e->adjvex = j; e->next = g->adjList[i].firstedge; //头插法建立边表 g->adjList[i].firstedge= e; /*如果为无向图,则加入以下代码 e=(EdgeNode*)malloc(sizeof(EdgeNode)); e->adjvex = i; e->next = g->adjList[j].firstedge; g->adjList[j].firstedge= e;*/ } }
3.图的DFS遍历
void DFS(GraphAdjList *g,int i) { EdgeNode *p; visited[i]=true; printf("%c ",g->adjList[i].data); p = g->adjList[i].firstedge; while(p) { if(visited[p->adjvex]==0) DFS(g,p->adjvex); p=p->next; } }
假设有下面这张图,这个图包含两个连通图。
输入如下:7 6 <==输入顶点数和边数 a b c d e f g <==输入顶点值 0 2 0 3 0 1 4 5 1 6 1 2 依次输入边
根据输入,可以得到邻接表如下:
根据邻接表可知,该图的深度优先遍历如下:a->b->c->g->d->e->f
程序运行结果:
证明程序是正确的。
完整程序代码参见:
https://github.com/zkangHUST/DataStructure -
二叉树及其基本操作
2018-09-09 18:11:05·二叉树与度为2的树的区别:二叉树的左右子树严格区分,不能随意交换 ·满二叉树与完全二叉树:满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树 二叉树的存储结构与基本操作 1.二叉树的存储结构 ...一些概念(待补充)
·二叉树与度为2的树的区别:二叉树的左右子树严格区分,不能随意交换
·满二叉树与完全二叉树:满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树二叉树的存储结构与基本操作
1.二叉树的存储结构
二叉链表
struct node{ typename data; node* lchild; node* rchild; };
由于二叉树建树前根结点不存在,因此其地址一般设为NULL:
node* root=NULL;
新建结点(往二叉树中插入结点)
node* newNode(int v){ node* Node=new node; Node->data=v; Node->lchild=Node->rchild=NULL; return Node; }
关于申请node型地址空间,也可用(node* )malloc(sizeof(node)); 【关于malloc和new的区别这个问题对我来说暂且有点高深……
2.二叉树结点的查找、修改
查找操作是指在给定数据域的条件下,在二叉树中找到所有数据域为给定数据域的结点,并将它们的数据域修改为给定的数据域
void search(node* root,int x,int newdata){ if(root==NULL) //递归边界 return; if(root->data==x) root->data=newdata; search(root->lchild,x,newdata); search(root->rchild,x,newdata); }
3.二叉树结点的插入
二叉树结点的插入位置就是数据域在二叉树中查找失败的位置
此处根结点指针root要使用引用void insert(node* &root,int x){ if(root==NULL){ root=newNode(x); //新建数据域为x的结点 return; } if(??由题意要求的二叉树性质应该插在左子树){ insert(root->lchild,x); }else insert(root->rchild,x); }
4.二叉树的创建
实质为二叉树结点的插入过程
node* Create(int data[],int n){ node* root=NULL; for(int i=0;i<n;i++){ insert(root,data[i]); } return root; }
5.完全二叉树的存储结构
基于完全二叉树的性质,有更方便的存储方法,可通过建立一个2^n的数组来存放所有结点的信息
·在1号位存根结点的前提下,对于完全二叉树中的任何一个结点(编号x),其lchild一定为2x,rchild一定为2x+1
·该数组中元素存放的顺序恰好为该完全二叉树的层序遍历序列
·判断某个结点是否为叶子结点的标志为:该结点(x)的左子结点编号2x大于结点总个数n
·判断某个结点是否为空结点的标志为:该结点下标大于结点总个数n二叉树的遍历
1.先序遍历
对一棵二叉树的先序遍历,序列的第一个一定是根结点
void preorder(node* root){ if(root==NULL){ return; } printf("%d",root->data); //访问根结点,例如输出数据域 preorder(root->lchild); preorder(root->rchild); }
2.中序遍历
只要知道根结点,就可以通过根结点在中序遍历序列中的位置区分出左右子树
void inorder(node* root){ if(root==NULL){ return; } inorder(root->lchild); printf("%d",root->data); inorder(root->rchild); }
3.后序遍历
对于后序遍历,序列的最后一个一定是根结点
void postorder(node* root){ if(root==NULL){ return; } postorder(root->lchild); postorder(root->rchild); printf("%d",root->data); }
无论是先序还是后序,都必须知道中序遍历序列才能唯一地确定一棵树
4.层序遍历
与树的层序遍历同样套路
若要记录结点层次,则在node结构体中加设layerstruct node{ int data; int layer; node* lchild; node* rchild; };
void bfs(node* root){ queue<node*> q; root->layer=1; q.push(root); while(!q.empty()){ node* now=q.front(); q.pop; printf("%d",now->data); //取出队首结点并访问 if(now->lchild!=NULL){ now->lchild->layer=now->layer+1; q.push(now->lchild); } if(now->rchild!=NULL){ now->rchild->layer=now->layer; q.push(now->rchild); } } }
给定先、中序重建二叉树
(给定先后序同理)
node* create(int preL,int preR,int inL,int inR){ if(preL>preR) return NULL; node* root=new node; root->data=pre[preL]; int k; for(k=inL;k<=inR;k++){ if(in[k]==pre[preL]) break; } int numL=k-inL; root->lchild=create(preL+1,preL+numL,inL,k-1); root->rchild=create(preL+numL+1,preR,k+1,inR); return root; }
二叉树的静态实现
struct node{ int data,lchild,rchild; //通常用-1表示子树为空 }Node[maxn];
其他操作相应更改即可~
-
印刷线路板及其制作工序
2020-08-27 09:30:42印刷线路板根据制作材料可分为刚性印刷板和挠性印刷板。刚性印刷板有酚醛纸质层压板、环氧纸质层压板、聚酯玻璃毡层压板、环氧玻璃布层压...这种电路板散热性好,即可弯曲、折叠、卷挠,又可在三维空间随意移动和伸缩。 -
图的邻接表表示及其遍历
2016-08-08 17:36:00图的邻接表表示及其遍历 1.图的结构定义 #define MAXVEX 100 #define true 1 typedef char VertexType; //定义图节点值得类型,可随意更换 typedef int EdgeType; typedef struct EdgeNode //定义边表节点 { int ... -
JAVA常见异常类型及其原因分析
2018-02-18 16:18:20版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ http://blog.csdn.net/xiaoduan_/article/details/79334786 JAVA常见异常类型及其原因分析 NullPointerException 异常 顾名思义,... -
private的作用及其使用
2019-06-27 12:00:40一旦使用了private修饰了成员变量,那么本类中仍然可以随意访问,但是一旦超出本类范围就不能进行访问了,也就是说在本类中{}两个大括号之间随便使用,一旦出了这两个大括号的话,就不能直接访问了。... -
模糊综合评判理论及其在正射影像质量评价中的应用
2020-01-19 00:59:00模糊综合评判理论及其在正射影像质量评价中的应用,娄安颖,孙琳,针对传统的正射影像质量评价中的随意性、片面性,本文在正射影像质量评价中引用了模糊综合评判的方法,给出了影响影像质量的三个 -
Java集合框架及其衍生
2018-03-31 15:04:551.Set,List,Map的区别和联系。 首先三者都是接口,Set和List是接口Collection的子接口,而Map是一个单独的接口。 List:可以运行重复的对象,可以插入多个Null个元素,是一个有序的容器...它提供了索引的随意访问。L... -
ISD33000型语音芯片及其应用
2020-12-13 14:13:20从而减少了失真,大大提高了录放音质量,并具有抗断电、音质好、使用方便、可反复录放,无需专用的语音开发工具,能随意更改内容和耗电省等优点,很适合于现场录放音系统。 ISD系列语音记录芯片广泛应用于自动化... -
最大堆及其操作函数
2017-06-12 17:14:00前几天在做Kth Largest Element in an Array 时使用到了堆,通过那倒题目也了解到了堆的make_heap。push_heap,pop_heap操作,看了C++ ...随意节点大于它的全部后裔,最大元在堆的根上(堆序性)。 堆总是一棵全然树... -
python之列表类型及其操作
2020-06-15 11:27:11列表本质是一种序列类型,创建后可以随意修改 [] 或list()创建 两个列表之间用赋值号连接,赋值仅传递作用,其实只是不同名字指向同一列表 列表类型操作函数和方法: 序列类型运用场景: 元素用于元素不改变的额... -
路由器NAT的应用环境及其配置简介
2020-03-04 11:37:30NAT的功能,就是指在一个网络内部,根据需要可以随意自定义的IP地址,而不需要经过申请。在网络内部,各计算机间通过内部的IP地 址进行通讯。而当内部的计算机要与外部internet网络进行通讯时,具有NAT功能的设备... -
单向链表及其两种实现
2019-11-28 12:23:21链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和一般节点,头... -
并查集及其典型应用
2019-08-26 17:01:14文章目录1. 图的连通性问题2. 并查集的原理简析2.1 初始化集合S2.2 Union(并)2.3 Find(查)2.4 通过读入直接相连的点对来更新S,并统计每个... (2)随意给你两个点,让你判断它们是否连通;或者问你整幅图一共有... -
伯德图显示的用户图形界面及其程序设计
2020-07-02 15:41:08以MATLAB图形用户接口为基础,针对线性系统对数频率特性曲线绘制而进行了图形用户界面(GUI)...运行本用户图形界面,可以随意地输入开环传递函数的分子、分母数据,直观地看到它所对应的伯德图,为分析、设计系统提供便利。 -
TMS320VC5402 DSP与ISD4004语音录放芯片的接口设计及其信息管理
2020-12-08 22:39:46许多类型的语音录放应用要求具备信息管理的功能,即能够随意地录、放、删除任意一段信息。而许多语音录放系统并不能很好地满足这种要求,如磁带录音系统。ISD4004语音录放芯片提供了SPI微控制器接口,使得... -
C# winform窗体及其控件的自适应
2020-03-07 16:19:05为了提升用户的体验,窗体不能再固定其大小(用户不能随意改变窗体的大小),所以要做到窗体适应电脑屏幕的分辨率,窗体中的控件要跟随窗体的变化比例而变化。 通过网上查找学习,发现有几个位大佬的方法不错,... -
javascript数组遍历的方式及其区别
2020-02-10 11:35:38for循环 使用示例 let array = ['item1','item2']; let len = array.length;...适用场景:非常灵活的一种方式,可以不必要遍历整个数组,可以根具需求随意跳出循环,但写法较为繁琐。 foreach 描述 for... -
全面解析无线局域网技术的概念及其特点
2020-03-04 12:21:13WLAN是利用无线通信技术在一定的局部范围内建立的网络,是计算机网络与无线通信技术相结合的产物,它以无线多址信道作为传输媒介,提供传统有线局域网LAN的功能,能够使用户真正实现随时、随地、随意的宽带网络接入... -
图论02—随意两点间最短距离及路径(经典)
2017-06-26 21:07:00求随意两点间最短距离及其路径。(万能最短路) 输入:权值矩阵,起点。终点 输出:最短距离矩阵。指定起讫点路径(经过的顶点编号) 为随意一点到其它点最短路奠定基础 ======================================... -
物联网的技术原理及其四大分类
2020-09-10 14:27:47在物联网中,物体之间无须人工干预就可以随意进行“交流”。其实质就是利用射频自动识别技术,通过计算机互联网实现物体的自动识别及信息的互联与共享。 射频识别技术能够让物品“开口说话”。它通过无线数据... -
LVS的工作模式及其特点总结
2020-06-15 23:52:21LVS工作层级 ipvs是LVS的核心组件 LVS的三种模式:NAT模式、DR模式、TUN模式 NAT模式的调度器一个公网IP一个私网IP TUN模式的调度器全为公网IP ...负载调度器必须是Linux操作系统,真实服务器随意; -
mvc 使用服务器上的图片_网络上的图片可以随意使用吗?
2020-11-28 09:03:58百度图片、朋友圈图片、他人文章里的图片及其他散见于网络上未标明来源的图片,是否可以随意使用?有无侵权法律风险?图片源自作者拍摄 | 未经授权禁止使用网络图片如果满足独创性的表达形式,将作为我国著作权法... -
Arbify:ARB文件本地化工具。 专用于Flutter及其国际包-源码
2021-02-04 09:35:11随意分叉! ARB文件本地化工具。 专用于及其包。 安装 首先,将.env.example文件复制到.env并为某些服务配置正确的配置。 cp .env.example .env nano .env # or vim or whatever you like :) 带注释的行无关紧要...