Network
网络层网络层两种服务的比较
虚电路服务 (面向连接)
参照电信网络,网络层间的通信需要 建立连接->通信->释放资源
建立连接
该连接是在已有网络的基础上建立的逻辑的虚拟连接
通信除了建立连接时的数据报需要有目标地址字段外其余均只需要虚电路编号字段.
由网络层来保证可靠传输
数据报服务 (无连接)
当前计算机网络所采用的服务每个数据报均需要有目的地址字段且在转发时自行选择转发路由
由主机来保证可靠传输,网络层仅提供灵活的,无连接的,尽最大努力的交付
虚拟互联网网络互连的方式
物理层 转发器,集线器
数据链路层 网桥
上述两层仅起到了拓展局域网的作用,并未实际上互连两个网络,因为互连网络的网络号是相同的
网络层 路由器
其它层 网关
虚拟互联网 -IP网不存在一个单一网络能满足各种需求,因此全球存在数百万的异构网络,但是使用IP协议进行通信的各网络,在网络层上可忽略异构性,看作一个统一的网络。
IP地址分配给主机某接口的在全球互联网范围内唯一的32位的地址
若某主机有多个接口,则该主机会拥有多IP地址,该主机称为多归属主机
IP地址的编 ...
TCP/IP协议栈
TCP/IP协议栈OSI七层模型
实现网络行业的兼容性
应用层
为用户提供接口/interface
应用层协议: OICQ,HTTP,HTTPS,BT/P2P
qq底层协议为OICQ
表示层
呈现用户数据 (数据格式,数据加密)
会话层
会话管理(建立,维持,关闭,区分)
运输层
实现数据的可靠/不可靠传输
运输层协议: TCP UDP(QQ)
网络层
提供三层寻址/IP地址和三层通信(路由器)功能
IP协议
ipconfig可查看本机IP地址
数据链路层
提供二层寻址/MAC地址和二层通信(交换机)功能
物理层
提供通信介质和接口标准
OSI实现过程OSI数据封装与解封装
Ethernet协议
以太网协议,用于实现链路层的数据传输和地址封装(MAC)
三个字段
destination: 目的MAC地址
source: 发送端MAC地址
Type: 上层协议
MAC地址
MAC地址的前半部分”OUI代码”厂商唯一标识符
全球唯一的48bit的物理地址
冒号分16进制表示
IP协议
互联网协议,用于实现网络层的不可靠的面向无连 ...
C++ 面向对象初级
C++ 面向对象上 语言+标准库
头文件与类的声明类的经典分类
带指针成员的类
不带指针成员的类
头文件的防范式声明12345#ifndef __xxx__ #define __xxx__ abc//执行#endif//执行
类要作提前引用声明使用参数初始化列表来规范化类的构造函数默认构造函数创建类对象时无需给定参数的构造函数
无参构造函数
全部参数带默认值的构造函数
不可以有两个默认构造函数
私有构造函数参数传递函数传参尽量采用址传递常量引用代替值传递
函数返回值的传递也尽量址传递注意:若返回对象是在函数中创建的,不可将其引用传回,因为函数调用结束后,其生命周四结束,内存被释放,传回的引用指向的为垃圾数据
Return by reference 语法
传递着无需无需知道接收者是以reference形式接受的,即接收者以对应引用接收时,传递者可使用相应类型传递值
友元函数相同class的各个对象互为friends运算符重载
作成员函数
任何成员函数会有一个隐藏参数this指针指向(函数调用者)即该运算符的左操作数,不能在参数处显示声明,但是可以在函数体中使用
非成 ...
Notes for Lecture 11-14
Notes for Lecture 11 12 13 14
Classes.Arrays.Implementing a Collection
Linked ListsPointer区别:
空指针nullptr c++关键字NULL 符号常量 = 0值为0但是并不指向任何存储空间
未初始化的指针不可使用为初始化的指针,因为该指针的指向随机
Linked Listscomponenttemplate struct LinkNode { ElemType data; LinkNode* next;}
traverse在不改变front指针的情况下,适用临时指针来遍历,loop条件为temp != nullptr
operate
链表头尾插入结点
删除头尾结点
析构函数在类生命期结束之前,由系统自动调动清理空间
公用数据成员的保护运算符重载与友元函数
Notes for Lecture 15-16
Notes for Lecture 15-16
Big-O时间复杂度
算法的时间复杂度记做 T(n) = O(f(n))
f(n) - 算法的基本操作重复执行的次数是模块n的某一函数f(n),
随着模块n的增大,算法执行的时间增长率与f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。
而判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高项)的阶数。
空间复杂度
算法的时空间复杂度记做 S(n) = O(f(n))
f(n) - 语句关于n所占存储空间的函数
算法实现所需的存储空间大小,n为问题规模
Trees
有向无环的链接结点结构
Terminology 术语
Binary trees最多有两个孩子结点的树
递归定义
Empty(nullptr)
Or 一个根节点 该根节点包含
数据成员
左子树 可为空
右子树 可为空
ApplicationPrint1234567891011void printTree(Tree* root) { if(root!=nullptr) ...
Compile
Compile.cpp->(预处理).i->编译.s->汇编.o->链接.exe
c++中文件没有任何意义,仅仅告知编译器对待编译该文件的方式,以.cpp对待?以.s对待?等等
预编译 .i在编译之前对程序内容进行取舍处理,使得一些语句参加编译,而另一些语句不参加编译
预处理指令在编译之前对文件的处理
文件包含include指示预编译将包含的头文件内容附加在程序文件中,以参加编译
#include <标准库文件>#include “用户自定义文件”
区别:<>包含的文件为标准库文件,编译器在搜索路径时会在默认系统头文件路径中搜索,而””包含的用户自定义文件,编译器会在源文件目录进行搜索,若搜索不到,再到默认头文件库中搜索
条件编译
c++编译时不允许出现属性的重定义(不同cpp文件全局变量的重定义,单一cpp文件中变量的重定义,等等重定义均不允许)
头文件卫士保护嵌套的include指令中的文件属性的名称不能被重复定义
#if #elif #else #ifdef #ifndef #endif
防止头文件的重复包含和编译解决方案
...
File Pointer
File Pointer 文件指针 istream 和 ostream 都提供了用于重新定位文件位置指针的成员函数。
这些成员函数包括关于 istream 的 seekg(”seek get”)和关于 ostream 的 seekp(”seek put”)。
seekg 和 seekp 的参数通常是一个长整型。第二个参数可以用于指定查找方向。查找方向可以是 ios::beg(默认的,从流的开头开始定位), 也可以是 ios::cur(从流的当前位置开始定位),也可以是 ios::end(从流的末尾开始定位)。
文件位置指针是一个整数值,指定了从文件的起始位置到指针所在位置的字节数。下面是关于定位 “get” 文件位置指针的实例:
12345678910111213// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)fileObject.seekg( n );// 把文件的读指针从 fileObject 当前位置向后移 n 个字节fileObject.seekg( n, ios::cur );/ ...
Notes for Lecture 10
Recursive Backtracking
SubListsQuestion
Decision Tree
Code12345678910111213141516171819202122232425262728293031323334//Lecture10 subListsvoid subListsHelper (Vector<string>& ori,Vector<string>& chosen) { if(ori.isEmpty()) { cout << chosen <<endl; } else { //every possible choice --include "a" or not //choose -try with "a" ... try without "a" co ...
Recursion Conclusion
Recursion Conclusion
How to Write a Recursive FunctionExhaustive Search 穷举搜索递归对搜索空间进行详尽的探索,筛选符合条件的
Struct伪代码123456789101112131415void explore(options, soFar){ if (no more decisions to make) { // base case } else { // recursive case, we have a decision to make for (each available option) { choose (update options/sofar) explore (recur on updated options/sofar) unchoose (undo changes t ...
Notes for Lecture 9
Recursive Backtracking
Maze
Permute简要对于给定vector(v1)中的元素进行全排列 eg:{“a”,”b”,”c”}
解决方案1.寻找自相似 对于给定数目元素的全排列问题,观察结果可见排列结果为各元素与其余元素全排列结果的全连接,类比骰子(每次骰子结果与其余骰子结果的全连接),但是骰子元素有重复,例如{1,1,1}。2.采用另一vector(v2)来存储当前选择的元素,追踪连接结果
Recursion
base casev1为空时输出v2的全排列结果
choice遍历v1的各元素,将当前元素存储到v2中,记录连接结果
explore求其余元素的全排列结果 (注意是其余元素,因此需要先将当前选择的元素从v1中弹出)
unchoice backtrackingcontinue时需要恢复v1,v2原始状态
123456789101112131415161718192021222324252627void PermuteHelper (Vector<string> ori,Vector<string> chosen) ...