- 博客(13)
- 收藏
- 关注
原创 C++STL 异常
① 建议自己的异常类要继承标准异常类,因为C++中可以抛出任何类型的异常,所以我们的异常类可以不继承自标准异常,但是这样可能会导致程序混乱,尤其是当我们多人协同开发时。② logic_error类及其子类、runtime_error类及其子类,他们的构造函数是接受一个string类型的形式参数,用于异常信息的描述。结论1:必须清楚的知道要转换的变量,转换前是什么类型,转换后是什么类型,以及转换后有什么后果。标准库中也提供了很多的异常类,他们是通过类继承组织起来的,标准异常被组织成八个。
2025-05-02 13:14:27
324
原创 C++STL 模板
它会通过检查文件的内容、文件头信息等方式,判断文件属于文本文件、二进制文件、压缩文件等哪一种类型。函数代码逻辑相同时(只有参数类型不同),为了代码复用,不维护过多函数,减小可执行文件大小。,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。· 可以通过空模板实参列表的语法限定编译器只能通过模板匹配。· 如果函数模板可以产生一个更好的匹配,那么选择模板。编译器并不是把函数模板处理成能够处理任何类型的函数。函数模板通过具体类型产生不同的函数。· 普通函数能够自动进行类型转化。
2025-05-01 16:07:37
261
原创 LeetCode283
借助快速排序的思想,以0分隔数组,用j指针将不为0的数放在数组开头,第一轮遍历后指针j指向最后一个不为0的数,并且没有改变数字相对顺序,第二轮遍历从j开始放入0.
2025-04-24 09:59:56
123
原创 LeetCode160
两指针经过结点数相等,若无相交结点,ANode、BNode同时指向NULL,跳出循环。ANode指向headB后到相交结点,共经过结点数:A+(B-C)BNode指向headA后到相交结点,共经过结点数:B+(A-C)ANode从headA到第一个相交的结点,经过结点数:A-C。BNode从headB到第一个相交的结点,经过结点数:B-C。设链表A长度:A,链表B长度:B,两链表重合结点数:C。
2025-04-24 09:08:06
108
原创 Linux系统编程阶段总结(六)
由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住,这样虽然达到了多线程操作共享数据时保证数据正确性的目的,却无形中导致线程的并发性下降,线程从并行执行,变成了串行执行,(由于锁只有一把,一次只能有一个线程访问数据)与直接使用单进程无异。这个程序中,当有多个消费者的时候,线程1阻塞在条件变量上,这时线程2也阻塞,调用unlock,会唤醒线程1,线程1再次加锁,逻辑出错,所以要循环判断条件变量是否满足;一个消费者时没有区别。
2025-04-15 19:08:16
837
原创 Linux系统编程阶段总结(五)
内核通过读取未决信号集来判断信号是否应被处理,信号屏蔽字mask可以影响未决信号集(内核不提供直接操作pending的方法,通过发送信号+操作mask可以影响pending),在应用程序中自定义set来改变mask,以达到屏蔽指定信号的目的。mask作用时间是一个进程,sa_mask只在当前信号捕捉函数期间有用,也就是:当程序执行到信号捕捉函数的时候,sa_mask将PCB中的mask“替换”/“覆盖”,当捕捉函数执行完毕后,PCB中的mask重新生效。将某个信号清出信号集 成功:0;
2025-04-15 09:14:07
776
原创 Linux系统编程阶段总结(四)
与此类似,将数据存入缓冲区,则相应的字节就自动写入文件,这样,就可以在不使用read和write函数的情况下,使用地址(指针)完成I/O操作,使用这种方法,首先应通知内核,将一个指定文件映射到存储区域中,这个映射工作可以通过mmap函数来实现。FIFO是Linux基础文件类型中的一种,但FIFO文件在磁盘上没有数据块,仅仅用来表示内核中一条通道,个进程可以打开这个文件进行read/write,实际上是在读写内核通道,这样就实现了进程间通信,通常借助环形队列来实现,数据一般只能读取一次。
2025-04-13 14:40:24
1411
原创 Linux系统编程阶段总结(三)
操作系统默认维护了一个缓冲区在内核中,叫做系统级缓冲,默认大小4096(4kb),中间黑线是系统调用read、write从用户态到内核态,反复在用户态和内核态中切换,非常耗时,实际上fputc、fgetc是缓冲区中写满4096再切换——预读入缓输出机制。inode结构体中有一个成员,描述磁盘盘块信息(存储文件内容的磁盘盘符号)因此当创建硬链接时,实际上是创建了个dentry,文件名不同,inode相同,当硬链接计数减为零时,不会再引用这块磁盘空间,但不会擦除磁盘空间,只会覆盖。成功:返回实际读到的字节数;
2025-04-11 15:55:30
1839
原创 Linux系统编程阶段总结(二)
动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置(报错原因:动态链接器在路径中找不到共享库:动态链接器需要在环境变量LD_LIBRARY_PATH中寻找动态库路径);关闭终端相当于结束程序,整个4G的空间就没了,在链接阶段,会将.rodata和.text合并(节省空间),linux下一次映射最少是4k(4096)--页(page),加起来要映射8kb,太浪费,且都是只读,就合并,0~3G中合并的有很多。应指定-lmylib,所有库文件名都以lib开头,开头的lib在指定参数时应省略。
2025-04-10 19:04:18
445
原创 Linux系统编程阶段总结(一)
硬链接:当删除原文件时,只要还有其他硬链接存在,文件的数据就不会被删除(只是硬链接计数-1),只有当所有硬链接都被删除后(硬链接计数为0),文件才会被真正从磁盘上删除。因此,硬链接实际上是同一个文件的不同别名。umask指定用户创建文件时的掩码,其中的mode和chmod的命令中的格式一样,如果不用mode参数,则显示当前的umask设置,如果用-S参数,则以符号形式显示设置。· 硬链接:由于硬链接是基于inode的,而不同文件系统的inode编号是独立的,所以硬链接不能跨越不同的文件系统创建。
2025-04-09 20:02:14
572
原创 Linux阶段总结(初步)
通过虚拟化技术,在电脑内,虚拟出计算机硬件,并给虚拟的硬件安装操作系统,即可得到一台虚拟的电脑,称之为虚拟机。命令行:即Linux终端,是一种命令提示符页面。以纯“字符”的形式操作系统,可以使用各种字符化命令对系统发出操作指令。命令:即Linux程序。一个命令就是一个Linux的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈。环境变量PATH这个项目里面记录了系统执行命令的搜索路径。这些搜索路径我们也可以自行添加到PATH中去。· 修改PATH的值。
2025-04-08 17:25:54
697
原创 C++面向对象总结
lC语言:int a = 10;int表示整数类,这是系统自带的一个类,a则是这个类的一个对象。int age;age=m_age;类里两个内容:年龄名字,叫做类的成员数据,或者叫属性,类比int a = 10,10就是a的属性;set函数,叫做类的成员函数,给年龄名字赋值,又叫方法,具体内容写在类的外面。
2025-04-06 23:15:41
1455
原创 LeetCode121
当给出样例是逆序数组时,min_P无法被更新,值为1e9,max_P也就无法被更新,值为0,因此最后无需特判max_P<0的情况。
2025-04-04 15:39:53
146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人