自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 VLAN 虚拟局域网

虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样。设置虚拟局域网相当于按自己意愿设定广播域,只有同处一个广播域的设备才能相互通信,要是想与别的广播域通信,需要网关,所以虚拟局域网能够隔断外界的广播请求。虚拟局域网具有以下优点: 网络设备的移动、添加和修

2017-10-18 21:42:09 541

原创 DHCP 动态主机配置协议

为了让TCP/IP协议简单易用,需要一个自动化配置工具,DHCP(dynamic host configuration protocol)。该协议的工作方式:①客户端广播一个报文(UDP格式)。②DHCP服务器收到广播,从IP地址池对应网段中选择一个空闲IP,以及其对应的网络掩码、缺省网关、域名服务器IP地址,打包起来以单播方式发给客户端。③客户端收到回复,将这些信息配置到

2017-10-18 21:28:50 744

原创 不同网段的通信(访问互联网)

一台电脑访问互联网时,首先输入要访问的地址的的域名。输入完之后的第一步是解析域名:①浏览器将域名交给DNS进程,DNS进程首先检查自己的缓存,若有对应的IP,则直接返回给浏览器,若没有,则进行第二步。②检查本地的host文件,看看有没有对应域名的IP,若有,则返回给浏览器,若没有,则进行第三步。③本地查找DNS服务器信息,得到服务器的IP后,将要解析的域名发给DNS服务器(

2017-10-18 10:34:21 833

原创 网段,掩码,网关,路由器

网段号由IP地址和网络掩码进行按位与得到。子网段:一个网段包含的所有IP。假如给定一个IP(IPv4):10.1.1.2/32 后面的32表示掩码的长度为32位(4个字节),即与IP同长,则其子网段只包含一个IP地址(10.1.1.2),而10.1.1.2/31 掩码长度为31位,则其子网段包含两个IP地址(00001010.00000001.00000001.0000

2017-10-18 10:04:44 1363

原创 不同网段的计算机之间的通信

假设电脑1ping电脑2,查询路由表时,若无匹配的掩码项,则会匹配最后一项,电脑1会将IP包发给所匹配的缺省网关,再查找其路由表,直至找到和电脑2匹配的网段,然后进行同网段的计算机通信的步骤,发送ARP广播,电脑2予以回应,其MAC地址进入电脑1的ARP缓存,二者成功建立链接。路由表的查询遵循最长匹配原则,网络掩码最长能有32位(4字节),与IP地址一样长,最短可以为0字节,此时会

2017-10-17 19:22:34 3050

原创 相同网段的计算机之间的通信

一台电脑上网需要一个IP地址、一个掩码、一个网关、一个域名服务器DNS地址。对于一个IP地址:10.1.1.2/24,24表示该IP网络掩码为二进制的24位,即3个字节,是该IP从左至右的三个字节。掩码遮盖的部分称为网段号,剩下的一个数字为主机号。所以IP=networkID + hostID。若两台电脑的网段号相同,则他们进行的是相同网段的通信,如下:假设电脑1p

2017-10-16 22:07:20 1980

原创 static修饰符

static的主要功能是隐藏变量,被static修饰的变量和全局变量一起被存储在静态存储区(静态存储区的变量默认初始化为0),区别是static修饰的变量可以限定作用域。static修饰的变量在其所在的scope中是唯一的,它只会在线程第一次接触它的时候初始化一次,在第一次初始化以后尝试再次初始化它是无效的,例:static int num=10;int num=1;// 这条

2017-09-12 17:46:45 194

原创 binary search中遇到的一个overflow问题

做leetcode的一道很普通的二分查找的问题的时候,使用的是用惯的mid=(front+low)/2写法,结果这次遇到了overflow问题,改成mid=front+(back-front)/2就没有问题了。写在这提醒一下自己要注意溢出问题。先抄下题目原文:然后我写的二分查找是:// Forward declaration of isBadVersion API.b

2017-09-11 18:13:08 391

转载 C++ 多线程 CloseHandle函数

CloseHandle函数读入一个句柄参数,释放其内存。Microsoft的文档里给它的函数定义是:BOOL WINAPI CloseHandle( _In_ HANDLE hObject);它返回bool类型,若成功释放句柄,就返回true,否则返回false。句柄也是系统资源,每次用完都要还给系统。需要注意的是线程并不是句柄,句柄相当于一个线程的指针,线程

2017-09-11 16:43:31 986

原创 记一个for(auto it:container)的问题

当使用for(auto it:container)遍历一个容器想要删除其中一个元素的时候,假设要删除的是第j个迭代器指向的元素,删除这个元素之后,容器后面的从原本的第j+1个元素开始向前移动一格,填满空缺,所以此时第j个迭代器已经指向了原本的第j+1个元素,然后一轮循环结束,迭代器++,指向了原本的第j+2个元素。这样就跳过了一个元素未被遍历到。

2017-09-11 16:23:19 3100

原创 const修饰符

const的优势:① 被const修饰的变量是只读的,可以防止意外的修改。② const相当于定义符号常量,可以和宏定义一样做到只修改程序开头的定义,来改变所有对应的值。③ 宏定义做的是值替换,而const修饰的变量从汇编的角度来看只是给出对应的地址。④ const的效率更高,编译器并不会给const变量分配内存,而是将其作为一个符号常量。const被用于指针:①

2017-09-11 15:48:48 246

转载 C++ 多线程 GetStdHandle函数

GetStdHandle返回一个指向标准输入,输出或错误处理的句柄(或是经过SetStdHanlde修改的指向特殊设备的句柄)。Microsoft文档里的函数定义如下:HANDLE WINAPI GetStdHandle( _In_ DWORD nStdHandle);其接受的参数有三种:STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, STD_ERROR

2017-09-11 13:03:10 3391

原创 C++ 多线程 WaitForMultipleObejects函数

WaitForMultipleObjects函数的定义如下,摘自微软的文档:DWORD WINAPI WaitForMultipleObjects(  _In_       DWORD  nCount,  _In_ const HANDLE *lpHandles,  _In_       BOOL   bWaitAll,  _In_       DWORD  dwMillise

2017-09-10 22:48:14 1640

转载 C++ 多线程 CreateThread函数

//先摘录一段网上关于这个函数的介绍当使用CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:  1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回  2把线程退出码置为STILL_ACTIVE,把线程挂起计数置1  3分配context结构  4分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为P

2017-09-10 22:07:25 976

转载 leetcode : addTwoNum

题:You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return

2017-08-31 23:52:35 1000

原创 leetcode : subtree of another tree

题:给出两棵二叉树,判断一颗是不是另一颗的子树代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NU

2017-08-29 23:14:06 233

原创 leetcode : mergeTrees(递归)

题:输入两颗二叉树,将它们合成为一颗二叉树,合成规则如下,The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tr

2017-08-29 21:03:54 535

原创 leetcode : twosum/BST

题:判断二叉树中是否有满足x+y=target的整数对(x,y)代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x)

2017-08-29 19:25:11 240

原创 leetcode : threesum

题目:从一个一维整型数组nums中找出所有能使x+y+z=0的解[x,y,z],并用一个二维数组输出。思路:给输入数组排序,然后遍历数组,把每次取出的元素作为可能解的最小元素x,在这个元素之后的序列中找能够使上式成立的所有(y,z)然后组合输出(x,y,z)。代码:#include using namespace std;vector> threeSum

2017-08-28 22:38:34 341

原创 leetcode : twosum(使用哈希表)

给定一个int型一维数组,和一个目标值target,用一个int型一维数组返回数组中每一对相加等于target的的键值的index。具体函数如下:#include #include #include using namespace std;vector twosum(vector& nums,int &target){ unordered_map m; //用哈希表

2017-08-28 01:09:32 277

转载 <map>\<unordered_map>

C++的map提供一种指定类型间的一对一映射关系,其基本的创建、查找、删除操作如下:#include #include #include using namespace std;map int_string; //声明一个从整型到字符串型的映射,即int为key,string为valueint_string[404]='Not Found'; //这是最简单的建立映射的语法

2017-08-27 21:35:39 281

转载 异常处理,abort(),exit(),返回错误码

abort函数位于cstdlib头文件里,它会终止程序,并根据具体实现返回一个值给调用这个程序的系统或进程,而exit函数单纯终止程序,不会返回消息。abort的具体实现:#include #include using namespace std;double hmean(double a,double b){ if(a==-b){ cout<<"aerror!a+b=0"

2017-08-27 20:51:25 4801

原创 python-pandas-series

python的pandas库的神器series,相当于有序字典。导入series的方法:from pandas import SeriesSeries的创建方式很多样:#仅用第一个参数,则使用默认的从0开始的整数index,不给定dtype参数编译器会选择最合适的一种a=[i+1 for i in range(3)]s1=Series(a) >>s10

2017-08-27 16:29:02 776

原创 成员模板,模板类做类成员

C++的模板可用作结构体、类或模板类成员,在此记录一个例子:#include using std::cout;using std::endl;templateclass beta{private: template //将模板类定义放在类的私有变量区域,模板类做为私有变量 class hold{ private: V val; public: hold(V v

2017-08-26 22:14:18 1628

原创 栈的实现

栈的存储结构:typedef struct{ elemtype *top; elemtype *base; int stacksize;}SqStack;函数InitStack,构造一个空栈:status InitStack(SqStack& s){ s.base=(elemtype *)malloc(100*sizeof(

2017-08-26 17:08:11 223

原创 线性链表:单链

C++中线性表的单链表存储结构:typedef struct Lnode{ elemtype data; struct Lnode *next; //指向下一个结点的指针}Lnode,*LinkList; //这里给两种变量起了别名,一个是struct Lnode起别名为Lnode,一个是struct Lnode*起别名为LinkList链表的第一项是不储

2017-08-26 16:45:21 319

原创 模板类,通用类型名与非类型参数

C++中有一系列用来存储和修改变量的类,用来实现栈和队列等数据结构,但若是每次遇到一种变量类型就要重写一个存储该类型的stack类未免太麻烦,为了解决这个问题,就需要使用模板类。例:用模板类实现的一个简单stack类template class Stack{private: Type items[10]; int top;public: St

2017-08-26 13:15:29 723

原创 私有继承与包含

C++要实现has-a关系,除了包含,还可以使用私有继承。私有继承的基类所有public,protected方法都会变成派生类中的private方法,这意味着基类方法不会成为派生类公有接口一部分,即只能通过派生类的基类成员调用基类方法。私有继承的语法://用private修饰基类//private是默认修饰关键字,若继承时未注明public,则是private继承class Stu

2017-08-24 20:24:18 509

原创 包含表示has-a模式,<valarray>类

假如我们现在需要一个Student类,里面储存了学生的name和scores,一般提到name会想到用char数组,提到scores会想到用double型数组,但使用数组就会带来的一个长度不确定的问题,要是声明一个很大的数组,太浪费内存空间,要是在长度不够用的时候再改变长度,则又太繁琐。这时候可以用C++自带的模板类,用string型变量储存name,用valarray储存scores。对

2017-08-24 16:01:35 391

原创 抽象基类,虚函数,纯虚函数

在敲代码的时候很容易遇到一些比较尴尬的情况。假设现在的需求是创建两个类,一个椭圆类,一个圆类。第一种方法是由于圆是椭圆的特殊情况,可以从椭圆类派生圆类,如下:

2017-08-24 04:29:32 299

原创 类继承,公有继承,多态公有继承

从一个类派生出另一个类时,原始类成为基类,继承类成为派生类。其语法为:class Subclass:public Parent_class{ //注意基类前的public修饰 ......};派生类不能直接访问基类的私有成员,必须通过公有方法(或者说基类方法)来访问,所以在写类的时候,最好写好访问私有对象的公有方法。具体地说,派生类的构造函数必须使用基类的

2017-08-24 01:16:05 549

原创 <fstream>文件输入输出基础操作

由于刚学C++,在此记录一些勉强够用的文件流输入输出操作先放一段代码:#include #include #include using namespace std;string promt_file_string(ifstream &infile,string promt="input:"){ while(true){ cout<<promt; strin

2017-08-24 00:24:54 2123

原创 类的操作符重载及友元函数

若想要定义的类成员能够符合人类逻辑使用已有的语言内置操作符,可以大幅提高编程效率和代码可读性其一般语法为:class test{public: ...... typename operator name(){ ...... } .......}; 举一实例:class Box{priv

2017-08-23 23:40:48 391

原创 类的构造函数和析构函数

python由于变量类型的自由,在定义函数的时候省去了许多麻烦。C++想要在类里定义一个构造函数,和写普通的成员函数有所区别:①构造函数没有声明返回类型②构造函数可以有多个,分别应对不同参数③通常取和类名相同的函数名析构函数:作用:在类成员使用完毕后,释放其所占用资源语法:①和构造函数一样不声明返回类型②在函数名前加~以表明身份,如~Box(){

2017-08-23 23:20:42 384

空空如也

空空如也

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

TA关注的人

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