
C++
文章平均质量分 96
C++苦修之路
嶔某
Wires hum with purpose
Whispers of code intertwine
Dreams in silicon
展开
-
C++进阶:异常
异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理, 异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。原创 2024-11-02 21:56:21 · 832 阅读 · 0 评论 -
C++进阶:C++11的新特性
2011年,C++标准委员会发布了C++11标准,这是C++的一次巨大飞跃,引入了许多重要的新特性,如智能指针、lambda表达式、并发编程支持等。这一版本的发布对C++社区产生了深远的影响,使得C++在现代软件开发中更具竞争力。原创 2024-11-01 22:19:35 · 1063 阅读 · 0 评论 -
C++进阶:哈希
哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。原创 2024-10-21 14:47:30 · 892 阅读 · 0 评论 -
C++进阶:实现红黑树
红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表示结点的颜⾊,可以是红⾊或者⿊⾊。 通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。原创 2024-10-11 23:04:22 · 797 阅读 · 0 评论 -
C++进阶:AVL树保持平衡的秘诀
AVL树整体结点数量和分布和完全⼆叉树类似,⾼度可以控制在log(n),那么增删查改的效率也可 以控制在O(log(n)),相⽐⼆叉搜索树有了本质的提升。原创 2024-09-29 11:40:22 · 1113 阅读 · 7 评论 -
C++进阶:set和map
set是key搜索场景的结构, map是key/value搜索场景的结构。它们的底层都是红黑树,红⿊树是⼀颗平衡⼆叉搜索树。原创 2024-09-27 18:27:31 · 701 阅读 · 16 评论 -
C++进阶:二叉搜索树
另外,⼆分查找也可以实现O(logN) 级别的查找效率,但是⼆分查找有两⼤缺陷:1. 需要存储在⽀持下标随机访问的结构中,并且有序。2. 插⼊和删除数据效率很低,因为存储在下标随机访问的结构中,插⼊和删除数据⼀般需要挪动数 据。 这⾥也就体现出了平衡⼆叉搜索树的价值。原创 2024-09-16 20:27:23 · 1257 阅读 · 15 评论 -
C++进阶:多态
• 对不满⾜多态条件(指针或者引⽤+调⽤虚函数)的函数调⽤是在编译时绑定,也就是编译时确定调⽤函数的地址,叫做静态绑定。• 满⾜多态条件的函数调⽤是在运⾏时绑定,也就是在运⾏时到指向对象的虚函数表中找到调⽤函数的地址,也就做动态绑定。原创 2024-09-14 13:22:32 · 942 阅读 · 15 评论 -
C++进阶:继承
继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。原创 2024-09-12 11:34:10 · 1136 阅读 · 15 评论 -
C++初阶:stack&queue&deque
但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间(缓冲区)的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构。原创 2024-09-07 17:13:24 · 690 阅读 · 13 评论 -
C++初阶:list
(1)这里的list迭代器的实现不再是简单的原生指针,而是对原生指针进行了一层封装,使它更符合迭代器的行为(2)这里多加两个模板参数,主要是 * -> 两个操作符重载访问Node里面的内容。如果调的是const_iterator,那么返回的就是const指针(const修饰指针指向的内容不可修改)或引用如果调用普通的iterator,返回普通指针或引用。(3)这样通过模板编译器其实还是会生成两个类,减少了重复的代码(4)list的迭代器不是随机迭代器,而是双向迭代器。原创 2024-08-08 22:04:04 · 670 阅读 · 23 评论 -
C++初阶:string
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP:面向对象编程(Object-Oriented Programming,简称OOP)的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。原创 2024-07-27 00:01:45 · 741 阅读 · 13 评论 -
C++初阶:模板
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。原创 2024-07-22 10:26:24 · 1106 阅读 · 11 评论 -
C++初阶:动态内存管理
1. 栈(stack)又叫堆栈--非静态局部变量/函数参数/返回值(数据,地址)等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存,做进程间通信。3. 堆(heap)用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段(静态区)--存储全局数据和静态数据,程序结束后由系统释放。5. 代码段--可执行的函数(类成员函数和全局函数)二进制代码/只读常量。原创 2024-07-21 22:29:44 · 756 阅读 · 10 评论 -
C++初阶:类和对象(三)
初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。原创 2024-07-18 22:12:02 · 999 阅读 · 11 评论 -
C++初阶:类和对象(二)
默认成员函数就是用户没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数原创 2024-07-15 17:08:08 · 1039 阅读 · 13 评论 -
C++初阶:类与对象(一)
⾯向对象三⼤特性:封装、继承、多态原创 2024-07-10 21:11:47 · 1389 阅读 · 9 评论 -
C++初阶:从C过渡到C++的入门基础
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不再冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。原创 2024-07-09 00:11:05 · 936 阅读 · 13 评论