- 博客(61)
- 收藏
- 关注
原创 基础IO、重定向、缓冲区
程序与外部设备进行数据交互的基本操作操作系统管理打开文件或 I/O 资源(如管道、套接字等)的核心机制。预留用户缓冲输入或输出的数据的内存的一段空间。
2025-03-21 13:49:57
516
原创 环境变量和程序地址空间
补:创建进程时先有task_struct,mm_struct等内核数据结构,对于进程可以不加载代码和数据,只有task_struct,mm_struct,页表等。<2>转化地址的过程中,对地址和操作的合法性进行判断,从而保护物理内存(通过页表的权限栏查询,是否由进行某种操作的权限)注:页表的作用是建立虚拟地址和物理地址映射关系,保证可通过进程的虚拟地址找到它应该在内存上的物理地址。2.一个进程就有一个虚拟地址空间,一套页表(虚拟地址,物理地址,权限). echo $xxx:查看一个指定环境变量的内容。
2025-03-11 12:51:06
235
原创 版本控制器Git和gdb
注:在Linux和Windows都可以向远端添加文件,若是一方已经对文件进行修改并提交,另一方提交时会报错,因为远端仓库里最新的文件没有同步到现在另一方的文件中(因为文件是同一份),此时需要用户根据提示进行操作先同步再提交。3.在Linux中next/n是逐过程进行调试,step/s是逐语句进行调试(补充:逐过程的话遇见函数调用不会进入函数内部,逐语句可以进入函数内部检查内部执行情况)git add 文件名/.:将指定文件/所有文件添加到仓库里(注意:此时只是添加到了临时的暂存区)
2025-03-05 23:24:53
549
原创 开发工具和库的一些介绍
静态链接:将库中的方法拷贝到我们的程序中,静态库只有在链接时候有用,一旦形成可执行程序,静态库可以不再需要(静态库不在内存里)x:删除光标所在的字符 p:将删除的字符粘贴到光标所在位置 n+x:复制选中的n个字符。yy:复制当前行 p:将复制的内容粘贴到光标所在位置 n+yy:复制选中的n行。dd:剪切当前行 p:将剪切的内容粘贴到光标所在位置 n+yy:剪切选中的n行。w:以单词为单位向右移动,n+w:向右移动n个单词。b:以单词为单位向左移动,n+w:向左移动n个单词。
2025-02-28 00:00:08
591
原创 KMP算法
又因为sub[i]==sub[k],故sub[0]...sub[k]=sub[i-k]...sub[i],即next[i+1]=k+1;证明:由于next[j]==k,所以可知:sub[0]...sub[k-1]=sub[x]...sub[i-1],可得x=i-k;=sub[k],此时让k回退直至出现sub[i]==sub[k]的情况,即令k=next[k](1)当回退到的位置和当前字符一样时,就写回退到的位置对应的nextval值。sub[i]==sub[k],此时next[j+1]=k+1。
2024-10-28 11:55:14
364
原创 笔试题目解析1
2>优化解法:定义两个变量记录str1,str2的下标,再用一层for循环遍历数组中的字符串,若s==str1,到s的前面去找str2的位置,若前面有str2,则更新两者间的最短距离,再更新str1的位置信息;若s==str2,到s的前面去找st12的位置,若前面有str1,则更新两者间的最短距离,再更新str2的位置信息。给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。
2024-10-15 10:28:54
287
原创 双指针思想
3)判断:若是窗口内元素之和大于等于目标值,计算此时窗口的长度,更新最小长度,同时让left指向的元素出窗口;1)定义两个指针cur,dest:让cur指向数组的nums[0],用来遍历数组;当cur指向的元素不为0时,让dest++,同时交换两个指针指向的元素,cur++注:该思想是根据单调性,当在某处可以完成要求后,若再进数据势必不会是所求的可能结果。<1>利用快慢双指针确定链表的中间节点,链表是否带环,带环链表的入环点在哪里。2)进窗口:让right指向的元素进入[left,right]的窗口内。
2024-09-08 17:15:37
388
原创 stack和queue的模拟实现
注:stack和queue的底层均可由vector和list实现,所以在模拟实现stack和queue时,我们可以传一个容器,借助该容器的相关成员函数实现新的类,为了适用性,在调用容器的成员函数时需选用vector和list都有的函数,但是若是选用deque这一容器适配器,则不用考虑这么多,因为deque包含vector和list的相关内容。1.priority_queue的默认底层容器是vector,而vector使用堆算法将元素存储成堆的结构。三.priority_queue的模拟实现。
2024-08-01 11:30:58
355
原创 list的模拟实现
等操作,所以为了实现迭代器,需要封装一个类模板list_iterator,又因为在类模板list中,迭代器需要被频繁调用,故而选用struct将成员变量和成员函数均设为共有。1>成员变量:_data(该节点存储的数据),_next(下一个节点的地址),_prev(前一个结点的地址)(1)记录pos位置的前一个结点和后一个节点,完成两节点间新的连接关系,删除pos位置的节点。(1)将pos位置的节点,前一个节点分别记录下来,创建一个新节点,完成三个节点新的连接关系。1>list的构造函数:list()
2024-07-30 10:55:09
307
原创 vector的相关内容介绍及模拟实现
1>注意编译器不能在没有实例化的类模板里取东西,因为它无法区分const_iterator是类型还是静态成员变量,所以vector<T>::const_iterator it前面要加上typename表明它是类型,或者直接用auto让编译器自己去判断it的类型。1>需要注意的一点是要记录原来的有效字符个数,避免之后计算_finish的指向时调用size()时出现两个指针分别位于两块空间内的情况。1.vector是一个模板,不支持流插入和流提取,因为它支持多种方式的输出,不需要局限于流提取的方式。
2024-07-27 09:50:48
372
原创 string类的相关知识及模拟实现
2>对于含参构造函数,计算_size和_capacity的大小,由于_capacity不包含'\0',所以初始的_size和_capacity的大小相同,用new为_str开一块(_capacity+1)个字符大小的空间,注意此处要多开一块空间存储'\0',再用strcpy将str中的内容拷贝到_str中。6>resize(size_t n)与resize(size_t n,char c)都是将元素个数改为n个,不同的是,若是增加元素,前者用0填充,后者用字符c填充。
2024-07-25 11:42:08
497
原创 C++之模板初阶
1.重载的函数仅是类型不同,代码复用率低,只要有新类型出现就需要用户自己手动实现相应函数2.代码的可维护性低,一个出错可能重载的函数全部出错。3.实例化:类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,实例化的结果才是真正的类。3.原理:在编译器阶段,对于函数模板的使用,编译器需要根据传入的实参类型来推演生成对应的函数以供使用。1.定义:函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。返回值类型 函数名(参数列表)
2024-07-19 08:39:48
390
原创 C++的内存管理
1)new和delete是用户动态申请和释放资源的操作符,operator new和operator delete是系统提供的全局函数,new在底层调用operator new来申请空间,delete在底层调用operator delete来释放空间。1)new和malloc,delete和free基本类似,不同的是new,delete申请和释放的是单元素的空间,new[],申请的是连续空间,若new在申请空间时失败会抛异常,而malloc申请空间失败会返回NULL。同:从堆上申请空间,需要用户手动释放。
2024-07-18 17:45:12
656
原创 类和对象(补充)
7>静态成员变量不能再声明处给缺省值初始化,因为缺省值是构造函数初始化列表的,静态成员变量不属于任何对象,不走构造函数的初始化列表。2>内部类是一个独立的类,跟定义在全局相比,它只是受外部类的类域限制的访问限定符限制所以内部类不属于外部类定义的对象。2>外部友元函数可以访问类的私有和保护成员,友元函数仅仅是一个声明,不是类的成员函数。3>静态成员函数没有this指针,可访问其他静态成员,但不可访问非静态的。1>定义:如果一个类定义在另一个类的内部,则该类就叫做内部类。3>一个函数可以是多个类的友元函数。
2024-07-16 15:28:11
199
原创 C++之类和对象
1>编译器编译后,类的成员函数默认都会在形参的第一个位置增加一个当前类型的指针,即this指针。自动生成的赋值运算符重载对于内置类型成员变量会完成浅拷贝(一个字节一个字节的拷贝)\值拷贝,对于自定义类型成员变量会调用他的拷贝构造。类中的内容叫类的成员;一个类,在我们不写的情况下编译器会默认生成6个默认成员函数(但在大多数情况下,系统默认生成的不是我们想要的,所以我们还需自己实现)1>类定义了一个新的作用域,类的所有成员都在类的作用域中,在类外定义成员时,需使用::作用域操作符指明成员属于哪个类域。
2024-07-16 08:26:10
589
原创 一些关于C++的基础知识
1.用inline修饰的函数叫内联函数,编译的时候C++编译器会在调用的地方展开内联函数,这样调用函数时就需要建立栈帧,可以提高效率。补:在进行变量间的运算时,编译器需要一块空间暂时存储表达式的求值结果,所以就临时创建一个未命名的对象即临时对象,临时对象具有常属性。1>对于const对象必须使用const引用,对于普通对象也可以使用const引用,因为对象在引用过程中访问权限只能缩小不能放大。2.在C++中,nullptr是一种特殊类型的字面量,可以转换成任意其它类型的指针类型,但不能转换成整型.
2024-07-09 19:19:50
1024
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人