- 博客(48)
- 收藏
- 关注
原创 RARP服务器设计
RARP服务器的设计服务器要为多个主机提供硬件地址到IP地址的映射。改映射包含在一个磁盘文件中,由于内核一般不读取和分析磁盘文件。因此RARP服务器的功能就得由用户进程来提供。RARP请求是作为一个特殊类型的以太网数据帧来传送的。所以RARP服务器必须能支持发送和接受这些类型的以太网数据帧。而且发送和接受这些数据帧和系统有关,因此RARP服务器的实现是和系统绑定在一起的。并不是...
2019-05-12 19:31:12
558
原创 线程零碎知识总结
在启动程序时,产生的进程只有单条线程。而创建线程时,每个线程都有一个属于自己的大小固定的线程栈。通过int pthread_create(pthread_t* thread,const pthread_attr_t* attr,void*(*start)(void*),void* arg);可以创建一条新线程。返回0表示成功,正整数表示错误。 线程ID:每个线程都会有一个唯一...
2018-11-07 12:38:37
246
原创 exec
int execve(const char* pathname,char* const argv[],char * const envp[]);pathname 是新程序的路径,argv是传递给新程序的命令行参数,envp指定了新程序的环境列表。调用execve()可以将新程序加载到某一进程的内存空间,并且丢弃旧的程序(进程依然是原来的进程),进程的栈,数据以及堆都会被新程序的给替换掉。且...
2018-11-07 10:05:18
225
原创 select poll epoll
目标:都是为了同时检查多个文件描述符,看是否准备好了执行I/O操作水平触发与边缘触发:水平触发通知:如果文件描述符上可以执行I/O系统调用,则认为已经就绪。例如:输入缓存收到50字节数据,将会注册该事件,但若只读走20字节还剩下30字节,那么之后依然会注册事件。也就是说,只要还有数据就会注册。边缘触发通知:如果文件描述符自上次状态检查以来有了新的I/O活动,此时需要触发通知。如:仅在输...
2018-11-06 22:13:49
199
原创 C++ 智能指针
#pragma once#include <iostream>using namespace std;template <typename T>class SmartPointer{ public: SmartPointer():mPointer(NULL){} Sm...
2018-09-18 22:23:21
149
原创 String
标准库类型string表示可变长的字符序列,使用时必须先包含头文件<string>,且string定义在命名空间std中定义和初始化string对象string s1;//默认初始化,这是一个空字符串string s2 = s1 ;//拷贝初始化,s2是s1的副本string s3 = "huya" //同样,s3是该字符串字面值的副本,字面值中除了最后的空字符外其他所有...
2018-09-11 10:33:20
190
原创 auto类型说明符和decltype类型指示符
auto类型说明符能让编译器替我们去分析表达式所属的类型,让编译器通过初始值来推算变量的类型。auto定义的变量必须有初始值使用auto也能在一条语句中声明多个变量当引用被用作auto初始值时,真正参与初始化的其实是引用对象的值。此时编译器以引用对象的类型作为auto的类型当初始变量是一个指向常量的指针时:#include <iostream>...
2018-09-10 20:52:30
221
原创 文件I/O(1)
UNIX系统中大多数文件I/O只需要用到5个函数:open,read,write,lessk,close这些函数是不带缓冲的I/O,read和write都调用内核的一个系统调用对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开/创建一个文件,内核向进程返回一个文件描述符惯例:在#include <unistd.h>中定义文件描述符...
2018-09-10 16:09:43
384
原创 C++并发(3)
在线程间共享数据:所有的线程间共享数据的问题,都是修改数据导致的。如果所有的共享数据是只读的,就没有问题,因为一个线程所读取的数据不受另一个线程是否正在读取相同的数据而影响 但是,如果数据在线程间共享,同时一个或者多个线程开始修改数据,就会有很多麻烦。用互斥元保护共享数据:在访问共享数据结构之前,锁定(lock)与该数据相关的互斥元,当访问数据结构完成后,解锁(unlock...
2018-09-10 13:08:10
156
原创 const 限定符
希望定义这样一种变量,它的值不能被改变。则用constconst int bufSize = 512;因为const 对象一旦创建后其值就不能再改变,所以const对象必须初始化。任何试图对const对象进行赋值的行为都将引发错误 const 的引用:把引用绑定到const 对象上,称为对常量的引用,这样就不能修改它所绑定的对象const int ci = 1024;...
2018-09-10 10:39:31
156
原创 引用和指针
引用:引用为对象起了另外一个名字,且引用必须初始化。程序把引用和它的初始值绑定在一起,而不是把初始值拷贝给引用。且一旦引用绑定后则不能再将它绑定给另外一个变量。(引用就是别名:像每个人有大名小名一样,引用只是一个已经存在的对象所起的另外一个名字)定义一个引用后,对其所有的操作都是在与之绑定的对象上进行的#include <iostream>using names...
2018-09-10 10:14:03
1040
原创 初始化
初始值:当对象创建时获得了一个特定的值,则这个对象被初始化。下列4条语句都是初始化:int a1=0;int a2={0};int a3(0);int a4{0};用花括号来初始化变量成为列表初始化,且使用列表初始化且当初始值存在丢失信息的风险时。编译器会报错#include <iostream>using namespace std;int mai...
2018-09-10 09:36:08
236
原创 10进制转换为16进制 c++
#include <iostream>#include <string>using namespace std;class Trans10{private: string str; string transtime(long long t) { string temp=""; long long t1 =...
2018-09-08 13:44:09
1912
原创 c++将浮点数里的小数出来成整数
#include <iostream>using namespace std;class Whole_to_decimal{private: int x;public: Whole_to_decimal(int x_):x(x_){} float transfloat(){ int flag=0; float t = ...
2018-09-08 13:12:19
5732
1
原创 C++11
__func__ 预定义标识符是预置在编译器中的宏,并不包含于任何头文件,所以直接调用即可,基本功能就是返回所在函数的名字例子:#include <iostream>using namespace std;const char* hello(){return __func__ ;}int main(){cout<<"Standard Clib:...
2018-09-07 23:28:30
275
原创 pthread
#include <iostream>#include <pthread.h>#include <unistd.h>#define NUM 5int main(){ pthread_t t1,t2; void *print_msg(void* ); pthread_create(&t1,NU...
2018-09-06 13:43:10
277
原创 C++并发(2)
线程管理:(在编译的时候要加上-std=c++11) 每个程序至少有一个线程:执行main()函数的线程,其余线程都有其各自的入口函数。当线程执行完入口函数后,线程就会退出。 启动线程:需要先包含thread头文件在创建std::thread对象时指定一个任务则启动一个新线程,任务在最简单的情况下是无参数无返回的函数,此thread实例就与新线程相关联例如:...
2018-09-06 10:40:55
306
原创 C++ 并发(1)
计算机的并发是值在单个系统里同时执行多个独立的任务,而不是顺序执行对于只有一个处理器的计算机,它只能在某一时刻执行一个任务。但却可以通过多次的任务切换,让任务看上去像是并行执行的,正因为任务切换太快,以至于无法感觉到任务在何时被挂起。但系统每次从一个任务切换到另一个时都要进行上下文切换,操作系统必须为当前运行的任务保存CPU的状态和指令指针,并计算出要切换到哪一个任务并为即将切换到的任务重新加...
2018-09-05 15:51:11
560
原创 C++ 异常
abort()函数位于头文件cstdlib中,向标准错误输出流(cerr)发送程序异常终止消息,然后终止程序。并返回一个值,通知处理失败此处用a+b可能导致分母为0作为例子#include <iostream>#include <cstdlib>using namespace std;template<class T>T hmean(T a...
2018-09-05 12:59:31
261
原创 2-3查找树
2-节点:含有一个键和两条链接(左链接指向小于该键值的子树,右链接指向大于该链接的子树)3-节点:含有两个键和三条链接(左链接指向小于所有键值的子树,中链接指向位于键值中间的子树,右链接指向大于所有键值的子树) 2-3查找树如图:在一棵完美平衡的2-3查找树中,所有叶子节点到根节点到距离是相同的 查找过程:判断一个键是否在树中,先将其与根节点比较,如果它与其中任一一...
2018-09-04 20:56:38
198
原创 堆和栈
c++编译的程序占用的内存分为:栈区(stack):由编译器自动分配释放,操作方式类似于数据结构的栈堆区(heap):由程序员主动分配释放或者在程序结束时由操作系统回收。分配方式类似于链表全局区(static):全局变量和静态变量的存储是在一起的,初始化的存放在一块区域,未初始化的在另一块区域。程序结束后由系统释放文字常量区:常量字符串存放这里。程序结束后由系统释放程序代...
2018-09-04 14:54:53
140
原创 一个简单的管理系统
学生类和老师类可以在数据类里查看增添删除信息。只实现了简单的很小一部分。staff.h: #pragma once#include <iostream>#include <string>#include <vector>using namespace std;struct information{ string na...
2018-09-03 22:28:06
873
原创 删除重复字符
给定两个字符,从第一个字符中删除在第二个字符中出现的字符思路:通过字符的ascii码值作为下标,用数组构建一个哈希表#include <iostream>#include <string>using namespace std;class Test{ private: string a; ...
2018-09-03 14:00:20
191
原创 丑数计算
将给定个数的丑数由小到大输出丑数(因子只包含2,3,5的数),1作为第一个丑数思路:丑数应该是另一个丑数除以2,3,5的结果(1除外)#include <iostream>using namespace std;class Test{ private: long long* pNumbers; ...
2018-09-03 13:14:47
247
原创 子网寻址
原先IP地址只是分为单纯的一个网络号和一个主机号,现在要把主机号再划分为一个子网号和一个主机号。例如在一个B类网络地址中,前16位用作网络号,后16位分为8位的子网号和8位的主机号。这样就可以有254个子网,每个子网有254个主机子网对子网内部的路由器是不透明的。如图:一分来自网络的数据报到达gateway,目的地址是140.252.57.1,路由器gateway知道子网...
2018-09-03 11:15:18
1331
原创 IP路由选择
IP路由选择是逐跳进行的。主要完成以下的这些功能:1 搜索路由表,寻找能于目的IP地址完全匹配的表目(网络号和主机号都要匹配)。找到则把报文发送给该表目指定的下一站路由器或直接连接的网络接口。2 搜素路由表,寻找能与目的网络号相匹配的表目。找到则把报文发送给该表目指定的下一站路由器或直接连接的网络接口。3 搜索路由表,寻找标为默认的表目完整主机地址匹配在网络号匹配...
2018-09-03 10:49:39
1698
原创 游戏
有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时,该小朋友获胜。...
2018-03-06 20:55:12
247
原创 贪心算法刷题(一)hdu 1050
/* 400个房间两两为一组,创建为大小为200的数组来存放 答案为:叠加最多的数*10 */#include <iostream>using namespace std;int main(){ int t,i,j,n,p[200]; int s,d,temp,k,max; cin>>t; for (i=0; i<t;...
2018-03-05 20:58:32
493
原创 并查集刷题—HDU1232
点击打开链接#include <iostream>using namespace std;int f[1000],road;int find(int i){ while (f[i]!=i) i=f[i]; return i;}void Union(int a,int b){ int A=find(a); int B=find(...
2018-03-04 16:30:22
222
原创 动态规划基本步骤
动态规划算法依赖于两个性质:1,最优子结构:问题的最优解是由最优子问题的最优解推出的,也就是问题的最优解包含了子问题的最优解2,重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不是总是新问题。有些子问题被反复计算多次。动态规划算法对每一个子问题只解一次,而后将其保存在一个表格中,在之后利用这子问题的解(1)找出最优解的性质,并且刻画其结构特征(2)递归地定义最优值(3)以自底向上的方式...
2018-03-02 20:14:13
7096
原创 动态规划刷题(一)
/* 有个穷困的艺术家。他画了一幅超现实主义的作品《方块手拉手》。现在他已经把图画中手拉手的一排大小不一的方块都画出来了。现在要考虑上颜色了。可惜他手中的钱并不多了。但是他是个有追求的人,他希望这幅画中每两个相邻的方块的颜色是不一样的。你能帮他计算一下把这幅画上色后,最少需要花多少钱么。输入 N个方块,K个颜色接下来每列是各个方块染成不同颜色的价钱输出 最少花的钱 例: 4 3 2 3 2 9...
2018-03-02 19:24:23
2499
1
原创 hdu 1290 套用数学公式
(1) n条直线最多分平面问题题目:n条直线,最多可以把平面分为多少个区域。公式:f(n)=n(n+1)/2+1(2)折线分平面公式:f(n)=2n^2-n+1(3)封闭曲线分平面公式:f(n)=n^2-n+2(4)平面分割空间问题公式:f(n)=(n^3+5n)/6+1此题用第四种公式#include<iostream>using namespace std;int main()...
2018-02-28 20:32:06
313
原创 终端下的一些指令
LANG=zh_CN.UTF-8将输出信息支持的语系改为中文LANG=en_US.utf8将输出信息支持的语系改为英文若需要其他不同的信息同步更改支持的语系则执行指令:export LC_ALL=en_US.utf8顯示日期與時間的指令: date顯示日曆的指令: cal簡單好用的計算機: bc(退出输入quit即可)对于
2018-01-05 18:56:15
244
原创 mysql中一些函数的用法
首先在mysql中创有这样一堆数据:AVG 用来找出平均值;group by 子句来计算多种记录集的平均值between 子句:之前要获得某一范围的数据要用>= ,CONCAT 函数用于将字符串合并起来 :有两个name为NULL的合并时结果依旧为NULL,需要注意若有某一处
2017-12-28 18:02:03
304
1
原创 敌兵部阵
/* C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。 中央情报局要研究敌人究竟演习什么
2017-12-28 16:49:31
229
原创 xcode里用mysql
首先在build setting 里作这几个改动在mysql里原创建有一个stu表在student database里。按照网上搜的代码照葫芦画瓢用c++ 链接mysql 输出上面的数据#include #include using namespace std;int main(){ const char user[] = "root"
2017-12-23 21:23:34
573
原创 学生排队
体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列。 例如,下面给出了一组移动的例子,例子中学生的人数为8人。 0)初始队列中学生的学号依次为1, 2, 3, 4, 5, 6, 7, 8; 1)第一次调整,命令为“3号同学向后移动2”,表示3号
2017-11-30 18:56:36
357
原创 c++分解因数
#include #include #include using namespace std;void resolve(int n,int start,string c){ //start比n大的情况在之前已经完成,所以不做任何操作 if (n==1) {//已经不能再分解 c+="1"; cout<<c<<endl; r
2017-11-27 20:41:28
4056
1
原创 二分法实现开方
#includeusing namespace std;double sqrt(double n){ double a=0,b=n; double c=(a+b)/2; while ((c*c)!=n) { if (c*c>n) { b=c; c=(a+b)/2;//左移 }
2017-11-27 15:11:37
928
原创 octave 基本操作
Octave 基本操作基本的数学运算:+ - * / ^ & | 等 也可以直接写一个变量,然后赋值。如果不希望显示结果只要加上分号就行(format long ,format short 控制输出长短格式)
2017-11-16 20:24:05
411
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人