CPP学习笔记

C++学习笔记 现在主流的编译型语言包括C、C++、Go、Rust等,它们的编译过程中需要将代码转换成机器语言,因此可以获得更高的执行效率和更好的性能。 而主流的解释型语言包括Python、Ruby、JavaScript等,这些语言需要解释器将代码转换成机器语言并运行,因此相对于编译型语言,它们的执行效率和性能可能会稍低,但是它们通常具有更高的开发效率和更强的灵活性,因为它们可以在运行时动态修改代码。 另外,还有一些语言是即时编译型语言(JIT),例如Java、C#和LuaJIT等,这些语言的编译器会在运行时将代码编译成机器语言,因此它们的执行效率和性能通常比解释型语言要高一些,但比编译型语言略低一些。 函数的声明和定义中, 不能重复定义一个参数的值; 带有默认值的形式参数必须放在参数列表的最右侧; 一、cin 函数的用法 使用cin从标准输入读取数据时,通常用到的方法有cin»,cin.get,cin.getline。 1.1 cin»的用法 (1)cin»等价于cin.operator»(),即调用成员函数operator»()进行读取数据。 (2)当cin»从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin»会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin»不做处理。 (3)不想略过空白字符,那就使用 noskipws 流控制。比如cin»noskipws»input; 1.2 cin.get的用法 1.2.1 cin.get读取一个字符 读取一个字符,可以使用cin.get或者cin.get(var),示例代码如下: #include <iostream> using namespace std; int main() { char a; char b; a=cin.get(); cin.get(b); cout<<a<<b<<endl; system("pause"); return 0; } 输入:e[回车],输出: 注意: (1)从结果可以看出,cin.get()从输入缓冲区读取单个字符时不忽略分隔符,直接将其读取,就出现了如上情况,将换行符读入变量b,输出时打印两次。 (2)cin.get()的返回值是int类型,成功:读取字符的ASCII码值,遇到文件结束符时,返回EOF,即-1,Windows下标准输入输入文件结束符为Ctrl+z,Linux为Ctrl+d。cin.get(char var)如果成功返回的是cin对象,因此可以支持链式操作,如cin.get(b).get(c)。 1.2.2 cin.get读取一行 读取一行可以使用istream& get ( char* s, streamsize n )或者istream& get ( char* s, size_t n, streamsize delim )。二者的区别是前者默认以换行符结束,后者可指定结束符。n表示目标空间的大小。示例代码如下: #include <iostream> using namespace std; int main() { char a; char array[20]={NULL}; cin....

March 19, 2022 · 7 min · 1375 words · sirius1y

学长的计算机网络笔记

概述 互联网:专有名词 互连网:通用网络 互联网的组成 边缘部分 由所有连接在互联网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。 端系统之间的两种通信方式 客户-服务器方式(C/S) 客户是服务的请求方,服务器是服务的提供方 客户软件的特点 被用户调用后运行,在打算通信时主动向远地服务器发起通信(请求服务)。因此,客户程序必须知道服务器程序的地址 不需要特殊的硬件和很复杂的操作系统 服务器软件的特点 一种专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求 系统启动后即自动调用并一直不断地运行着,被动地等待并接受来自各地的客户的通信请求。因此,服务器程序不需要知道客户程序的地址 一般需要强大的硬件和高级的操作系统支持 对等方式(P2P) 不区分客户和服务器。 核心部分 由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换) 在网络核心部分起特殊作用的是路由器 (router)。 at Shanghai University 路由器是实现分组交换 (packet switching) 的关键构件,其任务是转发收到的分组,这是网络核心部分最重要的功能。 分组交换是网络核心部分最重要的功能 电路交换 $$N$$ 部电话机两两直接相连,需 $$N(N – 1)/2$$ 对电线。这种直接连接方法所需要的电线对的数量与电话机数量的平方( $$N^2$$ )成正比。 当电话机的数量增多时,就要使用交换机来完成全网的分组任务,这就是电路交换 特点 电路交换必定是面向连接的 电路交换分为三个阶段: 建立连接:建立一条专用的物理通路,以保证双方通话时所需的通信资源在通信时不会被其他用户占用; 通话:主叫和被叫双方一直占用通信资源; 释放连接:释放刚才使用的这条专用的物理通路(释放刚才占用的所有通信资源) 总结 电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到 10% 分组交换 分组交换采用存储转发技术 步骤 在发送端,先把较长的报文划分成较短的、固定长度的数据段 每一个数据段前面添加上首部构成分组 (packet) 分组交换网以“分组”(也称为“包”,首部也可称为“包头”)作为数据传输单元,依次把各分组发送到接收端(假定接收端在左边) 接收端收到分组后剥去首部还原成报文 最后,在接收端把收到的数据恢复成为原来的报文。 首部的重要性 每一个分组的首部都含有地址(诸如目的地址和源地址)等控制信息。 分组交换网中的结点交换机根据收到的分组首部中的地址信息,把分组转发到下一个结点交换机。 每个分组在互联网中独立地选择传输路径。(通过路由器) 用这样的存储转发方式,最后分组就能到达最终目的地。 路由器的作用 在路由器中的输入和输出端口之间没有直接连线。 路由器处理分组的过程是: 把收到的分组先放入缓存(暂时存储); 查找转发表,找出到某个目的地址应从哪个端口转发; 把分组送到适当的端口转发出去。 优点 高效:在分组传输的过程中动态分配传输带宽,对通信链路是逐段占用 灵活:为每一个分组独立地选择最合适的转发路由 迅速:以分组作为传送单位,可以不先建立连接就能向其他主机发送分组。 可靠:保证可靠性的网络协议;分布式多路由的分组交换网,使网络有很好的生存性 缺点 分组在各结点存储转发时需要排队,这就会造成一定的时延。 分组必须携带的首部(里面有必不可少的控制信息)也造成了一定的开销 总结 每个分组都有首部和尾部,包含了源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组互相不会影响,因此在同一条传输线路上允许同时传输多个分组,也就是说分组交换不需要占用传输线路。...

22 min · 4542 words · sirius1y