- 博客(18)
- 收藏
- 关注
原创 Linux:进程间通信
每个进程各自有不同的地址空间,相互独立,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。
2025-04-06 17:16:33
995
原创 C++:哈希表和unordered系列容器
在C++98中,STL提供了底层为红黑树的一系列关联式容器,查询效率为log2N,即便在最差情况下也仅需要比较红黑树的高度次,所以当树中的节点非常多时,查询效率也不是很理想。它通过一个计算键值的函数(散列函数)来将所查询的数据映射到哈希表中的一个位置来查找该位置的内容,从而达到快速查找的目的。3. 在内部,unordered_map没有对<key, value>按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的哈希桶中。
2024-08-24 19:46:30
711
原创 C++:红黑树
_col(RED){}分析构建的新结点究竟设置成红色还是黑色好一点,取决于以上的规则三和规则四。首先我们要知道,插入这个节点之前该树一定是一棵正确的红黑树,必然满足上面的两个规则,如果我们新插入的节点默认选择黑色的话,那么凭空多出来的黑色节点必然会导致规则2被破坏,也就是说我们每插入一次就要去调整。但如果选择的是红色的话,如果红色结点的父亲节点是黑色,那么就不需要进行调整,如果父亲节点是红色才要进行调整。
2024-08-14 14:59:36
757
原创 C++: map和set的使用
1. set是按照一定次序存储元素的关联性容器2. 在set中,键值对为<value,value>,并且每个value都是唯一的。set中的元素不能在容器中直接修改,但是可以从容器中插入或删除它们,从而间接修改。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则(不允许存在相同的关键字)进行排序。4. set在底层是用红黑树实现的。
2024-08-04 19:51:56
1057
原创 DS:二叉搜索树
每个节点都有一个唯一的键值。左子树上所有节点的键值小于它的根节点的键值。右子树上所有节点的键值大于它的根节点的键值。左、右子树也分别是二叉搜索树。这种结构使得二叉搜索树在进行查找、插入和删除操作时,平均时间复杂度达到O(log n),是一种高效的查找树。按照这样存储数据,将二叉搜索树进行中序遍历后,结果是升序的。
2024-08-01 11:57:21
302
原创 C++:多态
重写的条件比隐藏更高,重写是一种特殊的隐藏在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。纯虚函数强制子类必须重写虚函数!是一种强制性的要求!如果不重写,自己也和抽象类父类一样无法实例化出对象!!
2024-07-17 20:53:45
616
原创 C++:继承
1、格式:2、继承方式和访问限定符:继承方式和访问限定符都存在公有(public)、保护(protected)、私有(private)这三种继承模式。3、 继承基类成员访问方式的变化总结:1、 基类的私有成员在子类都是不可见。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。基类的其他成员在子类的访问方式 = min(成员在基类的访问限定符,继承方式) ,其中 public > protected> private。
2024-07-12 17:28:27
522
原创 C++基础入门之stack(栈)和queue(队列)
1、栈是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。插入端被称为栈顶,相对地,另一端称为栈底。栈中没有元素时,称为空栈。2、栈的底层容器可以是其他的容器类模板或者一些其他特定的容器类。例如list,vecto,deque。在默认情况下没有为stack指定容器,则一般是使用deque;1、队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
2024-06-03 13:39:13
270
原创 从零开始vector的C++模拟实现
第二个参数const T& value = T(),T()是一个临时对象并且它没有名字(即匿名对象),我们前面用value引用,后面的匿名对象赋值的中间临时变量赋值给value,因为临时对象具有常性,所以这里我们在参数中应该用const修饰.拷贝构造函数需要在起始位置开一个空间和v一样大小的空间即可,然后把v中的数据一个一个拷贝过去。(深拷贝)因为当vector中储存的是自定义类型时,进行浅拷贝只是简单的字节拷贝,会析构两次,程序崩溃。是指向总容量的最后的下一个位置的迭代器。是指向首地址的迭代器,
2024-05-25 14:23:49
398
原创 C++基础入门(模板)
不管是类模板或是函数模板,都不是真正的类或函数,只是一个编译器用来生成代码的模具。模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程。对于函数模板而言,模板实例化之后,会生成一个真正的函数。而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始化。模板的实例化分为隐式实例化和显示实例化。不同类型所调用的模板函数是不同的函数。
2024-04-23 22:34:19
225
原创 C++基础入门(动态内存管理)
mallocrealloccolloc1、开辟一个新的空间,不对空间进行初始化和任何操作;更改动态分配的内存大小。注意:如果想扩容的空间还没有开辟空间,那么realloc的用法就等价于malloc。如果将内存块移动到新位置(异地扩容),之前内存块的内容也会随之转移到新的位置.但新的部分是未被初始化的.与之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。
2024-04-22 21:48:43
437
原创 C++基础入门(初始化列表)
成员变量初始化的顺序就是成员变量在类中的声明次序,与初始化列表中的先后次序无关。//先声明_a2int _a1;//后声明_a1A aa(1);aa.Print();运行结果:因为先声明—_a2,所以_a2是随机值,_a1=1;所以建议声明和初始化列表的初始化顺序一致。
2024-04-18 21:19:10
314
1
原创 C++基础入门(六个默认成员函数)
1、默认构造函数(Default Constructor):如果我们没有定义任何构造函数,编译器将会生成一个默认构造函数。默认构造函数不接受任何参数,并且执行成员变量的默认初始化。在很多情况下,这可能是合适的,但如果类的成员需要特定的初始化值,可能需要显式定义构造函数。2、析构函数(Destructor):如果我们没有提供析构函数,编译器会生成一个默认的析构函数。默认析构函数会释放对象所占用的内存,如果对象包含有指针成员,可能不会正确地释放内存或执行其他必要的清理工作。
2024-04-15 20:53:22
896
1
原创 C++基础入门(引用,内联)
5.在sizeof含义下,引用的大小是引用类型的大小,而地址的指针大小始终是地址空间所占字节大小的个数(64位平台下是8个字节,32位平台下是4个字节);指针和引用都是地址的概念,指针指向一块内存,它的内容是所指内存的地址;引用不是新定义一个变量,而是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间,3.引用在初始化引用一个实体后,不能在引用其他实体,而指针可以改变指向;6.引用自加则引用的实体增加1,指针自加,即指针向后偏移一个类型的大小,3.引用一旦引用一个实体,不能再引用其他实体。
2024-04-02 09:52:30
354
1
原创 C++基础入门
命名空间的定义需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。int a=6;int b=10;//...代码声明;// 第二个命名空间值得一提的是,在一个工程中如果存在多个名字相同的命名空间,编译器最后会合成同一个命名空间中。
2024-03-30 15:34:35
401
原创 字符串函数
比较两个c字符串的首位元素,如果首元素相同则比较下一位,直至不同或者字符串结束。str2:比较的字符串2。该函数返回一个指向最终的目标字符串 dest 的指针。该函数返回一个指向最终的目标字符串 dest 的指针。2.2函数功能:将字符串src拷贝到dest中。1.3函数参数:str1:比较的字符串1。1.2函数功能:比较两个字符串。所指向的字符串追加到。所指向的字符串的结尾。
2023-12-15 22:14:06
106
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人