- 博客(100)
- 收藏
- 关注
原创 c++编程(26)——智能指针
智能指针是c++中关于动态内存管理的重要一环,在智能指针之前,管理动态内存的方式都是使用new、delete关键字。那么只能指针的作用是什么呢?首先,智能指针是一个具有指针特性的对象,而非指针,其主要功能是利用对象的生命周期来管理资源。该技术有个专业名词,为RAII。RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。
2024-09-19 11:31:07 664
原创 c++编程(21)——类与对象(7)——多态
在c++中想要实现多态,首先要达到的条件是类之间构成继承关系(即多态的对象是基类和派生类)。博主以动物的叫声为例设计一个基类animal,在设计一个成员函数sound,当调用这个sound时,会在输出这个动物的叫声。现在,我们调用dog对象的sound函数和调用cat对象的sound函数就会有不同的效果。dog dog1;cat cat1;那么这是否说明cat和dog构成多态了呢?答案为否。
2024-08-15 13:47:18 1142
原创 数据结构(11)——二叉搜索树
二叉搜索树可以分为两部分,一部分是节点,另一部分则是树对于节点,其需要记录一个值,以及分别指向左子节点与右子节点的两个指针。再设计一个构造函数,通过传递key的值来生成该节点,并将左右指针置为空(方法不唯一,只是博主采用这种构造方式):_key(key){}k _key;接着是设计一个类来控制整个二叉搜索树,只需要定义一个指向二叉树的根节点的指针成员即可。此外,在设计一些搜索二叉树的成员函数,比如查找节点,排序节点,插入节点和删除结点。public://将节点类型重命名//查找。
2024-08-15 13:47:10 877
原创 c++编程(20)——类与对象(6)继承
而每个派生类定义各自特有的成员。所以在面对对象编程中,设计一个合理的基类以及派生类是一个非常重要的步骤。我举一个例子。比如,如果我们想要设计出一款游戏,那么首先我们可以考虑设计一个基类entity(实体),这个entity指的是游戏内可以交互的物体,以英雄联盟举例,英雄是一个实体,小兵和野怪是一个实体,防御塔也是一个实体,包括地形也是一个实体。OK,根据上面所说关于继承的层次关系,基类应该设计成拥有层次中所有类共同拥有的成员(即成员函数和成员变量)。当前构思中设想的派生类有:英雄、小兵、防疫塔等。
2024-08-13 17:23:02 864
原创 算法解析——双指针算法(1):数据划分
在一个无序数组中,让数组中的数据以某些性质分布在数组当中,这种操作称为数据划分。(当然,这是博主自己起的名字哈哈--!使用双指针进行数组划分的最典型的例子,就是快速排序了。在快速排序中,需要在数组内部找到一个key值,然后让key值的左边,全都小于等于key值,让key值的右边,全都大于等于key值。这意味着,这个数组的数据被划分成了两部分,一部分是小于等于key值,而另一部分大于key值,假设key值的下标为k,那么数组当中[0,k)的元素小于key,[k+1,n)的元素大于key。
2024-08-12 18:52:28 603
原创 c++编程(17)——deque的模拟实现(1)迭代器篇
欢迎来到博主的专栏——c++编程博主ID:代码小豪博主模拟STL中的容器时,参考的是SGI版本的STL,如果你对STL的源码感兴趣,请私聊博主。
2024-06-15 21:48:17 837
原创 从list的模拟实现中了解迭代器的设计方式
迭代器其实一个设计理念,不仅仅用用STL库,我们甚至还能在自定义类中用到迭代器,甚至还能将这些迭代器传到STL的算法中。实际上迭代器是容器和算法之间的桥梁,如果没有迭代器,我们需要为每个容器设计底层不一样的算法,比如find算法,在list中就需要通过访问下一个节点来查找,而在vector中就需要通过访问下标来查找,非常麻烦。而如果能设计出行为一致,底层不一致的迭代器,那么在设计算法时,就不需要考虑到容器之间的底层差异了。
2024-06-06 19:23:42 1022 1
原创 算法解析——单身狗问题
最近也是度过了5.20和儿童节这两个单身狗受难日,由于这两天学生都出去谈恋爱了,才让我有机会坐在图书馆里沉浸式刷题(也不知是喜是悲)。在机缘巧合下,我在牛客网和leetcode上都刷到了类似的问题:如何在非空数组当中,找到只出现一次的数字。牛客网对这道题型的起名也很有意思,叫做:单身狗问题,我想这也很符合我的现状(笑)。实际上博主并不仅仅是在思考单身狗问题的算法,而是想要抛出一个思想,那就是如果在刷OJ题的时候,人的逻辑难以解决某个问题,那么能不能换个角度,在机器逻辑上寻找突破口呢?
2024-06-01 20:37:19 1072
原创 c++编程(15)——list的模拟实现
受限于博主当前的技术水平,暂时还不能模拟实现出STL当中用到的allocator,所以在这片博客当中,博主更想表达的是list的数据结构,以及list的各个操作涉及的算法,还有list的迭代器是怎样的工作原理。博主参考的是SGI版本的STL源码,如果你对源码非常感兴趣,可以私聊博主获取源码。在《vectoe的模拟实现》这一博客当中,我是按照c++在线文档的接口顺序来模拟实现的,但是list的结构要比vector复杂,所以博主选择跳跃式的方法来模拟实现list。
2024-05-29 22:04:28 1256
原创 c++编程(13)——vector的模拟实现
博主目前的水平还不能很明确的描述allocator(空间配置器)的作用和行为,因此在模拟实现vector模板的时候不会模拟实现allocator。但是会尽可能的模拟vector常用的行为以及迭代器原理。本博客模拟实现的vector参考了SGI版本的STL库,如果大家想要STL的源码,可以私信博主。
2024-05-23 12:49:12 1037
原创 c++编程(12)——STL(1)vector
关于这片博客,由于博主对于STL的6大组件还处于一知半解的阶段,因此,博主会将重点放在vector的使用上,而不会详细的讲解诸如iterator,allocator等作用。事实上,如果你想懂STL,那么6大组件是你绕不开的一点,但如果你只是想用STL(比如用STL去leetcode刷刷题)。那么只需要和我一起了解他的接口就行了。
2024-05-19 14:01:43 1032
原创 c++编程(11)——string类的模拟实现
本片的string类的模拟实现不涉及模板,泛型编程并不是本专栏的重点内容,本专栏的主要目的是了解c++面向对象编程的特性,以及STL的部分使用方法。因此本博客模拟的string类是为了让读者了解类的封装方法、接口设计。
2024-05-14 22:09:56 1097
原创 从0开始linux(2)——热键、如何查阅手册
欢迎来到博主的专栏——从0开始linux博主ID:代码小豪博主使用的linux发行版:CentOS 7.6。
2024-05-09 13:26:47 666
原创 从0开始linux(1)——文件操作
欢迎来到博主的专栏——从0开始linux博主ID:代码小豪博主使用的linux发行版是:CentOS 7.6不同版本下的操作可能存在差异。
2024-05-04 22:02:58 673 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人