- 博客(55)
- 收藏
- 关注
原创 C++11容器emplace方法原理剖析 单例模式 简单工厂 工厂方法 线程安全的懒汉单例模式
【代码】C++11容器emplace方法原理剖析 单例模式 简单工厂 工厂方法 线程安全的懒汉单例模式。
2024-02-19 02:37:24
201
原创 右值引用 多线程 线程间互斥 mutex互斥锁 lock_guard和unique_lock 线程间同步通信-生产者-消费者模型 基于CAS操作的atomic原子类型
【代码】右值引用 多线程 线程间互斥 mutex互斥锁 lock_guard和unique_lock 线程间同步通信-生产者-消费者模型 基于CAS操作的atomic原子类型。
2024-02-18 01:20:14
99
原创 C++四种类型转换 虚基类 虚继承 菱形继承 向量容器vector 双端队列容器deque 链表容器list
【代码】C++四种类型转换 虚基类 虚继承 菱形继承 向量容器vector 双端队列容器deque 链表容器list。
2024-02-01 22:15:52
127
原创 空间适配器allocator 理解new delete operator new operator delete 迭代器iterator失效 new delete重载实现对象池
【代码】空间适配器allocator 理解new delete operator new operator delete 迭代器iterator失效 new delete重载实现对象池。
2024-01-29 00:24:37
80
原创 实现复数类CComplex 字符串String类及vector中的空间配置器allocator和迭代器iterator
【代码】实现复数类CComplex 字符串String类及vector中的空间配置器allocator和迭代器iterator。
2024-01-27 01:26:33
145
2
原创 类模板实现C++STL中的vector 及容器空间配置器allocator
【代码】类模板实现C++STL中的vector 及容器空间配置器allocator。
2024-01-25 23:42:19
83
原创 二叉树链式结构实现
前序遍历:根---左子树---右子树中序遍历:左子树---根---右子树后序遍历:左子树---右子树---根层序遍历:每一层依次遍历。
2023-11-08 13:15:08
67
原创 C语言 C++动态内存管理
向堆申请内存,申请失败返回NULL向堆申请内存+初始化为0,num为个数,size为类型的大小,申请失败返回NULLptr为原地址,realloc主要用来扩容,扩为size大小,当原地址处能申请size大小的内存时,则返回原地址ptr;当原地址处不能申请size大小的内存时,重新找寻size大小的空间,将原来的数据拷贝到新空间,释放原来的空间,返回新空间的地址。若申请失败返回NULL动态申请的内存必须释放,通过free()释放,最好再将指针置为NULL。
2023-10-28 19:13:51
64
原创 C语言实现小堆
二叉树第k层结点数的最大值为。满二叉树:每一层结点都达到最大值的二叉树称为满二叉树。完全二叉树:最后一层可能满可能不满,其他层都是满的二叉树称为完全二叉树。满二叉树是特殊的完美二叉树。任何二叉树,若度为0的结点为n0,度为2 的结点为n2,则有n2=n0-1;在二叉树中已知父节点的下标为parent,则左孩子的下标为leftchild=parent*2+1,右孩子的下标为rightchild=parent*2+2;
2023-10-28 11:33:52
72
原创 C语言实现队列
队列可以用数组或者链表实现,用数组实现头删需要挪动数据,不容易实现,用链表实现较为简单。队列中的数据遵循先进先出(First In First Out)的原则。
2023-10-27 00:00:42
41
原创 C语言实现栈
栈的实现可以用用链表或者数组,但是链表实现比较复杂一些(出栈不好实现),用数组实现简单点。栈中数据遵循后进先出(Last In First Out)的原则。
2023-10-25 23:41:23
30
原创 用C语言实现双向循环链表
顺序表(数组)扩容有消耗,且存在空间的浪费,头插头删中间插入中间删除效率低O(n)链表不支持随机访问,头插头删中间插入中间删除效率高O(1)双向循环链表,主要用于STL中的list实现,存储数据。单向不循环链表,主要用于oj题。
2023-10-25 20:19:11
37
原创 环形链表(C++)力扣
当无环时:当有环时:拓展问题:快指针走3步,慢指针走1步,快慢指针会相遇吗答案是不一定,因为当x为偶数时,fast和slow会相遇,x-2,x-4,x-6,...0当x为奇数时,fast和slow不会相遇,x-2,x-4,x-6,...1,-1。
2023-10-22 10:18:47
33
原创 面向对象基础知识(三)
explicit可以防止隐式类型的转换,但是只对一个参数的构造函数有效,如果参数大于等于2个,那么explicit无效。可以发生隐式类型的转换,//可以这样理解:Data d1=3;转换成Data tmp(3);对象成员变量被初始化的顺序只与成员变量在类中声明的顺序有关 与在初始化列表中的顺序无关。因为这些类型的变量必须在定义时被初始化,而初始化列表是对象成员变量定义的地方。内联函数的定义和声明不能分开,因为内联函数没有地址,分开后找不到。以下这些类型成员变量必须在初始化列表完成初始化。
2023-10-21 17:28:31
30
原创 面向对象基础知识(二)构造函数|析构函数|拷贝构造函数
构造函数完成对象的初始化工作。构造函数分为三种:1.自己不写编译器自动生成的默认无参构造函数2.自己写的无参构造函数3.自己写的全缺省构造函数当自己实现了构造函数,编译器不会再调用默认的无参构造函数。建议写全缺省的构造函数,因为全缺省的构造函数既可以传参数,也可以不传参数,表示的范围更广。编译器默认生成的构造函数对于内置类型的变量不会初始化,但对于自定义类型的成员对象会调用他的构造函数。C++11 中针对内置类型成员不初始化的缺陷,又打了补丁。
2023-10-15 18:19:25
34
原创 C++中关于内联函数的那些事
被inline修饰的函数称为内联函数,编译器在编译C++代码时,遇到内联函数就会原地展开,这样就避免了函数压栈的开销。是一种以空间换时间的手段(浪费更多空间存代码,但节省了建立栈帧的开销)。解决了频繁调用函数,建立栈帧的开销。
2023-10-12 22:23:44
32
原创 关于extern “C“
如果C语言项目要从C++写的库(动态库或者静态库)里调用想用的函数。那么必须再在该函数前面加上extern "C",否则链接不到。这样C语言项目调用函数时,这个函数就会按照C语言的规则来编译。C++项目调用这个函数就会按照C语言的规则调用。加了extern "C",函数就会按照C语言规则来编译,C语言程序就能找到,C++程序调用会按照C语言的规则来调用,也能找到。没加extern "C",C语言在链接时找不到函数的地址,因为函数是按照C++的规则来编译的,按C语言规则来调用找不到。
2023-10-12 17:50:47
25
原创 关于引用的一些事
引用是给已存在的变量取别名,他和变量是访问同一片空间。引用必须在定义时初始化。int& a;//这样的代码就是错的引用可以作为参数和返回值,这样可以减少拷贝,提高效率例如:int a=10;int& ra=a;//&a=&ra。
2023-10-12 12:57:43
20
原创 单链表的实现
链表是为了解决顺序表缺陷,而出现的数据结构,与顺序表互补。优点:头插头删,中间插入或删除,无需挪动数据,效率高O(1);缺点:不支持下标随机访问;不利于二分查找,排序等算法。
2023-10-11 20:38:24
29
原创 为什么C语言不支持函数重载?而C++却支持
c语言规则下汇编代码的函数名的命名规则与类型无关,而c++规则下的汇编代码的函数名的命名规则与类型有关。函数重载:C++中允许函数名相同,参数不同的函数共存,这就是函数重载。1.预处理:头文件展开,宏替换,条件编译,去掉注释。2.编译:检查语法,将代码转换成汇编代码。3.汇编:将汇编代码转换成二进制机器码。4.链接:将目标文件合并。
2023-10-11 00:20:24
141
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人