06 2019 档案

摘要:给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 思路1. 先将对应的行swap,然后转置。这个思路是最清晰的。 思路2. 将矩阵分成不同层: 如这个图,第一层是该4x4 阅读全文
posted @ 2019-06-27 17:40 李湘沅 阅读(300) 评论(0) 推荐(0) 编辑
摘要:自己写的递归方法复杂度太高,dp的方法准备把背包九讲好好看一下,欠的帐好多呀,WDNMD。 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。 阅读全文
posted @ 2019-06-26 16:51 李湘沅 阅读(131) 评论(0) 推荐(0) 编辑
摘要:rio: rio是一个结构体,rio结构体的作用是提供一个自己设置的IO缓冲区,从sockfd表示的文件中的接收缓冲区中读取数据到rio中,rio相当于一个中转站,获得对端写到sockfd中的数据时,首先将数据读取到rio维护的缓冲区中,然后再从rio维护的缓冲区读取到用户空间指定的区域中。 这个过 阅读全文
posted @ 2019-06-25 22:43 李湘沅 阅读(346) 评论(0) 推荐(0) 编辑
摘要:在冯诺依曼的体系结构中,一个进程必须有:代码段,堆栈段,数据段。 进程的虚拟地址空间图示如下: 堆栈段: 1. 为函数内部的局部变量提供存储空间。 2. 进行函数调用时,存储“过程活动记录”。 3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。 数据段(静态存储区): 阅读全文
posted @ 2019-06-24 08:41 李湘沅 阅读(1460) 评论(0) 推荐(0) 编辑
摘要:快排: Parition函数用于进行一次快排,本次快排将某个元素放在它应该呆在的位置pos。pos左侧全比它小,pos右侧全比它大。 Parition中,设置low指针与high指针,以待排元素为标杆,判断high指向元素是否大于待排元素,若小于则与low指向的元素交换,并切换到low指针。low指 阅读全文
posted @ 2019-06-21 11:58 李湘沅 阅读(768) 评论(0) 推荐(0) 编辑
摘要:序列式容器: 1.vector: 数据结构: 数据成员只有三个:1.iterator start;//指向目前正在使用的空间头 2.iterator end;//指向目前正在使用的空间尾 3.iterator end_of_storage;//指向可用空间尾 迭代器: vector的迭代器属于随机访 阅读全文
posted @ 2019-06-20 22:34 李湘沅 阅读(810) 评论(0) 推荐(0) 编辑
摘要:待写 阅读全文
posted @ 2019-06-20 20:05 李湘沅 阅读(98) 评论(0) 推荐(0) 编辑
摘要:为了解决内存碎片的问题,设计了双层级配置器: 第一级直接使用malloc和free配置与释放空间。 第二级采取两种模式:若请求配置区块大于128bytes,则使用第一级配置器的方式;若小于等于128bytes,为了减少内存碎片,使用内存池的方式。 根据_USE_MALLOC定义决定是采取第一级配置器 阅读全文
posted @ 2019-06-20 20:04 李湘沅 阅读(320) 评论(0) 推荐(1) 编辑
摘要:指针和引用的区别: 引用不是一个对象,所以它没有实际的地址。指针是一个对象,它有实际的地址,所以我们可以定义指向指针的指针,但是绝对不能定义指向引用的指针。 引用在其生命周期中不能改变所绑定的对象,但是指针可以在其生命周期内先后指向不同的对象。 引用在定义的时候必须进行初始化,而指针可以不必进行初始 阅读全文
posted @ 2019-06-19 21:51 李湘沅 阅读(592) 评论(0) 推荐(0) 编辑
摘要:普通情况下,初始化和赋值好像没有什么特别去区分它的意义。 int a=100;和int a;a=100间仿佛没有任何区别,但是当c++中引入类后,情况变得有些复杂。 首先理清下构造函数的一些东西。 关于构造函数,前面有两篇随笔写了默认构造函数和拷贝构造函数,其实还包括参数为一些成员变量属性的构造函数 阅读全文
posted @ 2019-06-19 10:44 李湘沅 阅读(4460) 评论(0) 推荐(1) 编辑
摘要:成员初始化列表:用于辅佐构造函数(可以是默认构造函数),对成员变量进行赋值。 一般情况下,使用成员初始化列表与在构造函数内部对成员进行赋值没有什么好坏之分,使用哪种方式对对象进行初始化全凭心情。 但是,在以下四种情况的成员变量中,只能使用成员初始化列表进行初始化: 1.当初始化一个const mem 阅读全文
posted @ 2019-06-19 10:29 李湘沅 阅读(403) 评论(0) 推荐(0) 编辑
摘要:UNP中第72~73页中将read函数封装为了readn与readline函数。 readn用于读取n个字节到vptr中,readline用于读取一行数据到vptr中。 为什么要将read函数封装为readn与readline呢? 这是因为在文件类型为socket文件时,使用read和write进行 阅读全文
posted @ 2019-06-18 23:07 李湘沅 阅读(476) 评论(0) 推荐(0) 编辑
摘要:拷贝构造函数不同于默认构造函数,class X的拷贝构造函数要求传递参数中必须有class X对象,当然参数列表可以是多参数的,但是第一个参数必须是class X类,且第二个及后续参数需要给与默认值。 默认的拷贝构造函数的形式: 当class没有提供一个显式(explicit)的拷贝构造函数时,将有 阅读全文
posted @ 2019-06-18 10:50 李湘沅 阅读(640) 评论(0) 推荐(0) 编辑
摘要:在以下四种情况中,如果类中没有定义一个默认构造函数,则编译器会自动生成一个nontrivial的默认构造函数,而不是一个不做事情的trivial默认构造函数:1.内含一个成员变量,而这个成员变量所属的类中含有默认构造函数,则此时需要为此类生成一个implicit default constructo 阅读全文
posted @ 2019-06-17 10:05 李湘沅 阅读(3037) 评论(0) 推荐(0) 编辑
摘要:首先,假设: 基类为Point *ptr; ptr=new Point2d; Point2d为派生类。 z()为基类的虚拟成员函数,那么在调用ptr->z()时,这种使用基类指针来调用正确的z()实体的多态是怎么实现的?或者说,需要什么信息才能在执行期调用正确的z()? 要调用正确的z(),必须要知 阅读全文
posted @ 2019-06-15 11:29 李湘沅 阅读(240) 评论(0) 推荐(0) 编辑
摘要:消极的多态: Point *ptr; ptr=new Point2d; 其中,Point为基类,Point2d为Point类的派生类,这种多态称为消极的多态。这种多态形式在编译时期就已完成,ptr扮演一个输送机制,这样在程序的任何地方均可以使用ptr来指向任意一个派生类。他被称为消极的,是因为没有对 阅读全文
posted @ 2019-06-13 11:25 李湘沅 阅读(282) 评论(0) 推荐(0) 编辑
摘要:三次握手: 第一次握手: 客户端:首先客户端发起连接,在TCP层封装的包内设置标志位SYN,同时产生一个随机32位序号(举例为1000),发送给服务器端。 服务端:服务器端接受后,首先检测标志位SYN是否为1,若为1则说明接受成功。 第二次握手: 服务端:服务端也往回发送一个包,在包的TCP层设置标 阅读全文
posted @ 2019-06-11 21:12 李湘沅 阅读(140) 评论(0) 推荐(0) 编辑
摘要:存储持续性:变量从声明到销毁。 自动存储持续性:自动变量(如在函数内int a;)的持续性为自动,在代码块({...}或函数内)中被创建,执行完函数或代码块后销毁,内存被释放。如在函数内(包括main)声明自动变量,则函数结束后就销毁。 静态存储持续性:在函数外(如在main之前声明int a;另外 阅读全文
posted @ 2019-06-06 18:04 李湘沅 阅读(282) 评论(0) 推荐(0) 编辑