![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++初阶
文章平均质量分 91
胜利熊猫
大三在校生,希望通过分享给同样喜欢学习的朋友提供帮助,也希望通过分享为自己带来更大的提升。
展开
-
【异常 - 错误的更优解决方案】
- C++异常的优点:1. 异常对象定义好了,相比错误码的方式可以清晰准确的展示出错误的各种信息,甚至可以包含堆栈调用的信息,这样可以帮助更好的定位程序的bug。2. 返回错误码的传统方式有个很大的问题就是,在函数调用链中,深层的函数返回了错误,那么我们得层层返回错误,最外层才能拿到错误;而异常则直接跳转到匹配的catch。3. 很多的第三方库都包含异常,比如boost、gtest、gmock等等常用的库,那么我们使用它们也需要使用异常。4. 部分函数使用异常更好处理,比如构造函数没有返回值,不方便原创 2024-03-10 14:20:57 · 836 阅读 · 1 评论 -
【智能指针】
1. 智能指针类似于之前学过的迭代器,但又有所不同,智能指针是借助对象的局部作用域有效,自动释放资源,顺便对资源进行访问,他管理资源的申请和释放; 迭代器是用来遍历容器,访问数据,并不控制资源的申请和释放。2. 关于shared_ptr:智能指针是一种用于管理动态分配的内存资源的工具,它可以自动地在适当的时机释放所管理的内存,避免内存泄漏和悬挂指针等问题。智能指针通常用于以下场景:动态内存管理:在C++中,使用new关键字进行动态内存分配,而使用智能指针可以自动管理分配的内存,避免忘记释放原创 2023-10-20 16:54:06 · 185 阅读 · 25 评论 -
【红黑树 -- 理论与实现】
以上就是我们关于红黑树概念以及变色、旋转的全部内容,红黑树的旋转和avl的旋转都是一样的,不一样的一点就是红黑树旋转更新节点颜色,avl旋转更新节点的平衡因子。红黑树是近似平衡,avl则是绝对平衡,而为了达到绝对的平衡自然就需要进行更多的旋转操作,所以avl在插入过程中会消耗大量的时间,而因为是绝对平衡的,树的高度接近完全二叉树,查找的效率自然就会提高很多,不过由于二叉树查找效率为logN,在10亿个数据中进行查找也只需要查找30次,由于红黑树允许1倍左右的高度差,因此10亿个数据最多可能需要查找原创 2023-05-30 09:00:42 · 923 阅读 · 25 评论 -
【c++ 之 多态】
多态的重点1. 就是要了解多态构成的条件:父类的指针或引用;虚函数重写。2. 就是知道了解虚函数表的原理:存的是虚函数地址。3. 清楚多态实现的原理。原创 2023-04-26 12:00:51 · 835 阅读 · 30 评论 -
【c++迭代器模拟实现】
STL 提供了六大组件,彼此组合套用协同工作。这六大组件分别是:vector的底层是数组,因此支持随机访问,vector的正向迭代器可以直接使用原生指针;vector的反向迭代器需要对原生指针进行封装,让它的行为可以和正向迭代器保持一致。反向迭代器vector的反向迭代器要和正向迭代器保持一致那就需要模拟正向迭代器的全部功能:++,–,比较大小,解引用,下标访问,以及如果数据元素是自定义类型我们还需要提供重载的箭头运算符: ->我们现在反向迭代器写好了,但是好像少了些什么:const迭代器好原创 2023-05-05 22:51:30 · 954 阅读 · 22 评论 -
【难学易用c++ 之 继承】
打怪升级:第50天继承机制是面向对象程序设计使代码可以复用的最重要的手段,他允许类在保持原有特性的基础上进行拓展,增加新的功能,这样产生的类叫做子类或者派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。public :} protected : string _name = "小李子";// Person类作为父类,被student 和 teacher继承后,父类的public 和 protected 成员(变量和函数)都会变成子类的一部分,可以在子类中进行访问。原创 2023-04-24 20:10:29 · 594 阅读 · 19 评论 -
【模板特性补充】
打怪升级:第42天一个程序或项目由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接生成单一的可执行文件的过程称为分离编译模式。优点提高了代码的复用性,减少冗余,缩短了编程周期;增强了代码的灵活性;缺点模板会导致代码膨胀,导致编程时间变长(其实这不算缺点,因为如果不使用模板,我们就需要自己手写多份类似的代码,所以这些所谓的代码膨胀是必不可少的消耗);出现模板编译错误时,提示信息非常凌乱,不易定位错误。(这一点刚开始练习模板的朋友们会深有体会的)原创 2023-04-12 15:47:43 · 551 阅读 · 14 评论 -
【详细了解c++模板】
打怪升级:第40天x = y;y = tmp;x = y;y = tmp;return 0;因此,我们祖师爷就在想,能不能我们只自己写一个“模具”出来,之后具体需要什么类型由编译器来判断并且复刻出可以使用的函数?就像我们的印刷机 – 有一个原样,想要得到它的复制品就轻而易举,这样不仅帮助程序员们节省了对类似代码的拷贝与维护,并且还可以少掉许多头发。模板函数不允许自动类型转换,但普通函数可以进行自动类型转换,例如上面的add模板,两个参数类型需要保持相同;原创 2023-03-21 22:36:26 · 83 阅读 · 9 评论 -
【浅谈 new 与 delete】
打怪升级:第39天在C语言中,我们动态申请内存的方法是使用malloc函数,它的同胞兄弟还有calloc 和realloc,与它们配套使用的释放内存的操作为free函数;因为c++是兼容c的,所以这些函数在c++中是同样可以使用的,那既然如此,c++为何还要大费周章地去再增添两个新的操作符来完成“原本就可以完成的工作”呢?C语言是一个面向过程的语言,而c++虽然脱胎与c语言,但它是属于面向对象的,虽然有相同之处,但是c++相对C语言又添加。原创 2023-04-20 15:06:47 · 242 阅读 · 14 评论 -
【c++类与对象 -- 补充 】
打怪升级:第37天在上一篇文章中我们详细讲解了类与对象的主要内容,那是一块难啃的骨头,不过还好,我们已经跨越了重重阻碍走到了这最后一步,这里呢我们对类与对象的一些边边角角进行补充,这关打完–原地飞升。静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区;静态成员变量必须在类外定义定义时不添加static关键字,类中只是声明;类静态成员即可用类名::静态成员或者对象.静态成员来访问;静态成员函数没有隐藏的this指针,不能访问任何非静态成员;静态成员也是类的成员,原创 2023-03-15 09:40:30 · 503 阅读 · 20 评论 -
【c++类与对象 】
1. 类的权限 :public、protected、private;2. 类的封装、声明、实例化;3. 类大小的计算,内存对齐;4. this指针;5. 构造函数的七个特点、析构函数的六个特点;6. 深浅拷贝、赋值;7. 运算符重载:前置++和后置++,流插入和流提取运算符重载;8. 取地址运算符重载;9. const成员函数。原创 2023-03-08 20:04:37 · 463 阅读 · 24 评论 -
【c++之于c的优化 - 下】
内联函数:inline、自动类型:auto、范围for循环、空指针nullptr。原创 2023-02-09 15:45:44 · 567 阅读 · 29 评论 -
【c++之于c的优化 - 上】
打怪升级:第31天cin、cout,命名空间,缺省参数,函数重载,引用。原创 2023-01-23 23:36:19 · 559 阅读 · 28 评论 -
【stl -- 内建函数对象】
介绍了仿函数的概念,以及stl中的三组内建函数对象:算数仿函数、关系仿函数、逻辑仿函数;希望对朋友你有所帮助。原创 2023-01-31 18:24:07 · 438 阅读 · 37 评论 -
【内排序 -- 八大排序】
打怪升级:第12天排序:所谓排序,就是使一串记录,根据其中某个或某些关键字的大小,递增或递减地排序起来的操作。下面在实验中我们使用整形数据来进行操作,并且全部排为升序序列。的支持。原创 2023-01-19 15:43:47 · 3132 阅读 · 34 评论 -
【c++ -- 谓词】
函数对象是一个类,而非一个函数,我们下面的匿名对象就是一个函数对象。函数对象使用重载的小括号时,其行为类型函数,因此也叫仿函数。一元谓词:operator() 函数接收一个参数;二元谓词:operator() 函数接收两个参数。c++中的谓词:返回值为bool类型的仿函数;重载函数调用操作符的类,其对象常称为函数对象。原创 2022-12-28 10:28:16 · 1484 阅读 · 14 评论