- 博客(33)
- 收藏
- 关注
原创 Linux文件
程序的执行是基于虚拟地址空间的,由。虽然1号fd和2号fd都对应的显示器文件,但是他们两个是不同的,如同认为,同一个显示器文件,被打开了两次,所以log.txt里只有1号fd的内容,而显示器上还是2号fd内容的数据。我们知道,动态库在进程运行的时候,是要被加载的(静态库没有), 且常见的动态库是被所有程序动态链接的,都要使用, 所以动态库也叫共享库.于是我们可以得到一个结论,实际上,0,1,2分别是stdin,stdout,stderro,其中stdin,stdout,stderro是FILE* 类型的,
2024-06-18 11:15:05
404
原创 搜索二叉树
但是InOrder()需要一个参数root,现在有三种解决办法,a.将_root改为public,b.写一个GetRoot(),c.如下。此时有两种解决办法,一是更新_root,更新为节点3,二是找左子树的最大值来作为cur的prev。我们知道,搜索二叉树的中序遍历是一个有序表,现在我们想要像这样调用。看似上面的代码没有问题,但面对下面的测试用例时,就会有问题。这个引用起作用,就需要一层一层的往下递归传递。, 这样是错误的,因为函数的默认参数。其中第②种情况包含第①中情况。,可以看下面的递归展开图。
2024-05-22 15:24:05
385
原创 c++继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用public:protected:// 公有继承protected:int _stuid;// 学号protected:int _jobid;// 工号int main()
2024-04-25 18:40:58
970
原创 linux进程控制
c语言提供了一共有6个execl函数关于函数命名规则的理解l(list) : 表示参数采用列表v(vector) : 参数用数组p(path) : 有p自动搜索环境变量PATHe(env) : 表示自己维护环境变量。
2024-04-22 20:56:00
716
原创 反向迭代器
为例,我们完全可以再添加一个__list_reverse_iterator结构体,只需要修改++和–的逻辑。但是这样代码重复度太高了!而且自定义类型的迭代器才可以这样用,所以SGI版本的STL使用了迭代器适配模式。创立一个reverse_iterator.h,弱化了源码的萃取版本。单独写一个迭代器的类不仅减少了代码的冗余,其他容器也可以很好的适用。
2024-03-03 21:31:28
301
原创 stack和queue
是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。
2024-03-03 21:29:56
797
原创 进程地址空间
看task_struct的源码,可以看到有一个指针,其中mm_struct就是地址空间,里面有各个区域的划分所以地址空间就是一种内核数据结构......
2024-02-14 20:38:07
1294
原创 stl_list
迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。
2024-01-31 20:56:35
339
1
原创 linux进程(1)
抢占与中断:抢占是内核对进程的管理:当高优先级的任务因中断而成为就绪,特定的低优先级进程将让出CPU,而那个高优先级的进程得到CPU。如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。时间片:时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。独立性: 多进程运行,需要独享各种资源,多进程运行期间。
2024-01-29 20:12:03
1858
1
原创 模版_函数模版与类模版_使用类模板写一个通用栈
函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。
2023-10-19 15:46:37
34
1
原创 cc++内存管理
选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)globalVar在哪里?C localVar在哪里?AstaticGlobalVar在哪里?C staticVar在哪里?Cnum1 在哪里?Achar2在哪里?A *char2在哪里?ApChar3在哪里?A *pChar3在哪里?Dptr1在哪里?A *ptr1在哪里?B。
2023-10-14 20:23:23
28
1
原创 c++类和对象第二部分
public:static StackOnly CreatObj() // 提供一个静态成员函数供外界使用return s;StackOnly(int a = 0) : _a(a){} // 将构造函数私有化int main()return 0;public:static StackOnly CreatObj() // 提供一个静态成员函数供外界使用return s;
2023-10-08 16:18:28
56
5
原创 c++类和对象
在Person.h中有如下代码int age;// 定义public:// 声明private:int _age;// 声明Person.cppmain.cppint main()Person p1;return 0;此时运行代码会出现链接错误(fatal error LNK1169: 找到一个或多个多重定义的符号),因为age会在person.cpp和main.cpp展开,都会放到符号表,链接时就会有两个age,所以.h文件中要谨慎地定义全局变量。
2023-09-14 17:49:16
65
7
原创 c++的静态成员
static数据成员在类外定义和初始化是为了保证只被定义和初始化一次,这样编译器就不必考虑类的函数里面第一个对static变量的’=’操作是赋值还是初始化了。static const int可以在类里面初始化,是因为它既然是const的,那程序就不会再去试图初始化了。因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。// 必须要进行初始化,且类内声明,类外初始化。// 也可以在类外初始化。// 静态成员属于类,不属于对象,是所有对象共享。
2023-08-03 08:46:45
40
6
原创 stl_set
同样的,map容器也要求比较函数对象必须是const的,因为map容器也是一个有序的关联容器,它会根据比较函数对象的结果来排序和存储键值对。set容器要求比较函数对象必须是const的,是因为set容器是一个有序的关联容器,它会根据比较函数对象的结果来排序和存储元素。为了保证set容器的正确性和稳定性,比较函数对象必须是const的,这样它就不能修改自身或者其他元素的值,只能进行比较操作。容器,以在容器中对元素进行排序和比较。容器对象,并使用自定义的比较函数。是一个有序容器,其中的元素类型是。
2023-05-25 10:10:04
44
原创 c++的静态成员
static数据成员在类外定义和初始化是为了保证只被定义和初始化一次,这样编译器就不必考虑类的函数里面第一个对static变量的’=’操作是赋值还是初始化了。static const int可以在类里面初始化,是因为它既然是const的,那程序就不会再去试图初始化了。因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。C中一个函数里定义一个static变量是为了保证只初始化一次。
2023-05-13 21:14:26
36
原创 c++友元
class Boy;// 声明Boy类 class Girl {public :// 将PriData函数声明为Girl类的友元函数 private :int age;public :// 将PriData函数声明为Girl类的友元函数 private :int age;Girl g1("翠花" , 18);Boy b1("张三" , 20);return 0;
2023-04-25 13:22:26
42
原创 结构体初阶
结构体(struct):是在C语言编程中,一种用户自定义可使用的数据类型,且是由多个相同或不同数据类型的数据项构成的一个集合。所有的数据项组合起来表示一条记录。结构成员的类型:char、int、short、long、float、double、数组、指针、结构体等等。struct 结构体名称{char a;int b;//a,b,c……皆为结构体成员变量(结构体内容)double c;…………}结构体变量;//(分号不能丢)struct Bchar a;short b;
2023-02-13 21:16:23
38
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人