C++
文章平均质量分 85
Yuzuriha Inori
美好的一天从不会写简单题开始.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++】智能指针
C++中的智能指针,重点讨论了其设计思路、使用场景及标准库中的实现。智能指针基于RAII(资源获取即初始化)原则,通过类的生命周期管理资源,确保资源在异常抛出时仍能正确释放,避免内存泄漏。标准库提供了多种智能指针,如auto_ptr(已弃用)、unique_ptr(独占资源)、shared_ptr(共享资源)和weak_ptr(解决循环引用问题)。shared_ptr通过引用计数管理资源,而weak_ptr则用于打破shared_ptr的循环引用,避免内存泄漏。此外,智能指针还支持删除器,允许自定原创 2025-05-12 20:52:35 · 2898 阅读 · 57 评论 -
【C++11】异常
C++中的异常处理机制,包括异常的概念、抛出和捕获、栈展开、匹配处理代码、异常重新抛出、异常安全问题以及异常规范。异常处理允许程序在运行时检测并处理问题,通过throw抛出异常对象,并由匹配的catch块处理。栈展开过程在抛出异常后寻找匹配的catch块,若未找到则程序终止。异常重新抛出允许在捕获异常后重新抛出给外层处理。异常安全问题涉及资源泄漏,建议使用智能指针解决。C++11引入了noexcept关键字,用于指示函数是否可能抛出异常,但编译器不会强制检查。原创 2025-05-12 20:51:53 · 1275 阅读 · 41 评论 -
【C++11】类的新功能
上文我们学习了包装器:function和bind。function可以包装一切可调用对象,并用统一的调用方式调用不同的可调用对象。bind则可以控制函数参数个数本文我们来学习C++11的类中新增的一些功能。原创 2025-04-29 16:20:45 · 1116 阅读 · 58 评论 -
【C++11】包装器:function与bind
上文我们学了C++11中一个新的表达式:Lambda表达式。Lambda表达式可以在函数内部定义,其本质是仿函数本文我们来学习C++11的下一个新语法:包装器。原创 2025-04-29 16:16:24 · 1006 阅读 · 42 评论 -
【C++11】Lambda表达式
上文我们学习了C++11新语法,可变参数模板以及用可变参数模板作为形参的emplace接口。本文我们来学习C++11下一个新语法,Lambda表达式。原创 2025-04-26 22:06:35 · 1612 阅读 · 50 评论 -
【C++11】可变参数模板
上文我们学到右值引用及其移动语义,学习到了C++11中对性能提升对重要的更新之一。本文我们来讲讲,C++11的下一个新语法:可变参数模板。原创 2025-04-26 15:46:35 · 992 阅读 · 38 评论 -
C++11进阶之路:右值引用和移动语义,让代码跑得更快!
在传值返回的这种情况下,我们无法使用传左值引用返回,只能使用传值返回。而在C++11之前,只能通过编译器的优化提高代码的运行效率。但是在C++11之后,使用移动语义可以彻底解决这个效率问题。即使代码一点不优化,面对移动构造、移动赋值极其高的效率而言,不痛不痒。C++11之后编译器的优化不再是雪中送碳,而是锦上添花。只有需要深拷贝的类才有实现移动构造、移动赋值的价值。毕竟浅拷贝的代价本就很小。原创 2025-04-22 23:23:39 · 1072 阅读 · 49 评论 -
C++11新增语法:列表初始化
接下来我们将要讲解,相较于c++98,c++11中新增的语法以及如何使用~。我们首先来讲解:列表初始化。下文预告:右值引用和移动语义。原创 2025-04-19 12:49:10 · 823 阅读 · 52 评论 -
oi~,让我告诉你如何实现哈希表
假设M为 2^3,这相当于直接保留了2进制中的后3位,那么只要key值的后3位相同那么就一定冲突,例如:3,11,19,27......,它们二进制的后三位都是011,所以它们同时取余M都等于3。同理当M为10的幂时,假设为10^3,这相当于保留了10进制中的后3位,那么只要key值的后3位相同就一定冲突,例如:1001,2001,3001.....,所以也不可取。如图,如果这里我们删除30这个值,后续查找时发现20这个值冲突,根据插入规则,我们会去往后面找,当找到空时查找停止,查找20就会失败。原创 2025-04-10 22:15:24 · 1700 阅读 · 60 评论 -
封装红黑树实现map和set
之前我们学习了set与map容器的如何使用,红黑树的实现。接下来我们来看看如何通过封装红黑树,实现我们自己的set与map。原创 2025-04-09 22:28:22 · 876 阅读 · 47 评论 -
oi!让我来给你唠唠咋实现红黑树☝️
先旋转在将p变为黑,pp变为红,使其满足规则。这样调整过后p变成了新的”根”节点,且为黑色,而黑色节点不论p的上一层是黑色还是红色都符合规则。所以旋转+变色后就结束调整。(在旋转过程中,因为这里是三叉链要注意_parent指针的更新,详细可参考具体的实现代码)先p点旋转,再pp点旋转,最后cue变黑色 pp变红色。这样调整过后cur变成了新的”根”节点,且为黑色,而黑色节点不论cur的上一层是黑色还是红色都符合规则。所以旋转+变色后就结束调整。(在旋转过程中,因为这里是三叉链要。原创 2025-03-10 21:46:03 · 1135 阅读 · 42 评论 -
让我来告诉你如何实现AVL树(C++)
完整代码如下// 需要parent指针,后续更新平衡因子可以看到int _bf;// balance factor 平衡因子:_kv(kv), _bf(0){}public:while(cur)if (cur->_kv.first > kv.first) //pair重载了大小于运算符elseelse//连接到父亲节点//控制平衡//更新平衡因子elsebreak;//进行旋转。原创 2025-03-06 17:34:08 · 761 阅读 · 25 评论 -
超详细介绍map(multimap)的使用
红黑树的节点类型是pair类型,使用pair<Key,T>存储数据T1 first;T2 second;{}{}{}原创 2025-02-24 23:09:42 · 739 阅读 · 18 评论 -
超详细介绍set(multiset)的使用(C++)
set的声明如下,T为set的底层关键字set默认要求T支持小于比较,若不支持或者自己想实现其他比较,可以自己写仿函数传给第二个参数set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参数一般情况下,我们是不需要传后两个参数的set的底层是由红黑树(既平衡二叉树)实现的,增删查的效率是logN,迭代器遍历走的是二叉树的中序遍历,所以是有序的。原创 2025-02-21 17:06:43 · 804 阅读 · 16 评论 -
二叉搜索树的实现(C++)
二叉搜索树(搜索二叉树,Binary search tree)是一种特殊的二叉树。其规则为:左子树的值一定小于等于根,右子树的值一定大于等于根,并且左右子树也为搜索二叉树。原创 2025-02-16 22:58:00 · 517 阅读 · 20 评论
分享