C++学习之路
文章平均质量分 96
逐步学习C++各种知识嗲女
加一zZ
一个学习C++的新人
展开
-
C++特殊类设计&&类型转换
特殊类的设计中,要掌握好一点,就是只能通过一个接口来获取类,其他的方式不允许,让成员函数或私有或禁掉就可以。特别是单例模式,变成中我们经常用到。对于类型转换,除了是在多态转换中必须使用外,其他三种方式建议使用,可以增加代码的规范性。!!!!!!!!!!!!原创 2024-01-16 21:01:19 · 926 阅读 · 2 评论 -
C++ 智能指针
智能指针的使用跟普通指针类似,可以使用运算符“ * " 和 ” -> "去获得指向的对象,因此,我们就需要在类中重载" * " 和" -> "函数。当程序结束时,此时ptr1和ptr2指针被销毁时,对象ptr1和ptr2会自动调用析构函数去释放所指向的资源,这是智能指针特点。由于我的类中没有定义拷贝构造函数和赋值重载函数,那么我们只能调用类中原生的拷贝构造函数和赋值重载函数。原创 2024-01-14 16:32:33 · 1003 阅读 · 0 评论 -
C++《异常》
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了不同的部分可以抛出不同的异常,然后在总的main函数中使用基类捕获所有的异常再来进行特殊的处理//基类//异常public:, _id(id){}protected://错误信息int _id;//错误码//派生类//数据库异常public:{}原创 2024-01-06 08:00:00 · 928 阅读 · 0 评论 -
C++11 右值引用
首先,介绍一下左右值:左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋 值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左 值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。int main()// 以下的p、b、c、*p都是左值int b = 1;// 以下几个是对上面左值的左值引用return 0;原创 2023-12-14 14:39:17 · 913 阅读 · 0 评论 -
C++位图和布隆过滤器
布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大。同时检索速度也越来越慢,上述三种结构的检索时间复杂度分别为O(n),O(log n),O(1)。原创 2023-12-10 15:59:57 · 751 阅读 · 0 评论 -
string的模拟实现
现代写法在 string 中体现的优势还不够大,因为好像和传统写法差不多。但是到后面我们实现 vector、list 的时候,你会发现现代写法的优势真的是太大了。现代写法写起来会更简单些,比如如果是个链表,传统写法就不是 strcpy 这么简单的了,你还要一个一个结点拷贝过去,但是现代写法只需要调用 swap 交换一下就可以了。现代写法更加简洁,只是在 string 这里优势体现的不明显罢了,我们后面可以慢慢体会。原创 2023-11-01 16:44:09 · 41 阅读 · 1 评论 -
C++AVL树
二叉搜索树虽可以缩短查找的效率,但。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年,即可降低树的高度,从而减少平均搜索长度。。定义。原创 2023-11-28 20:39:35 · 343 阅读 · 0 评论 -
C++搜索二叉树
搜索二叉树,SearchBinaryTree 名称实在是又臭又长!我们不如取名为 SBTree,但是 SBTree 听起来好像有点不文明,我们还是叫 BSTree 吧。这里我们用模板,模板参数我们给了一个 K,表示 key 的意思(模板参数并非一定要用 T)。K _key;下面我们来定义整个树,BSTreeNode 也有些长了,我们不如将其 typedef 成 Node。原创 2023-11-23 20:50:29 · 840 阅读 · 0 评论 -
vector类
1. vector是表示可变大小数组的序列容器。2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3.本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2023-11-07 19:56:34 · 28 阅读 · 0 评论 -
C++模板初阶
如何实现通用的交换函数呢?使用函数重载虽然可以实现,但是有一下几个不好的地方:1.重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数2.代码的可维护性比较低,一个出错可能所有的重载均出错那能否呢?首先模板分为函数模板和类模板想到模板,就会联想到泛型编程泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。原创 2023-10-11 20:57:38 · 28 阅读 · 1 评论 -
List--运算符重载实现list迭代器
迭代器是借助结点的指针访问修改链表的,结点是属于链表的,而不属于迭代器,所以不用去管它的释放问题。因此,拷贝构造、赋值重载和析构函数,这些都不需要自己实现,默认生成的可以。原创 2023-11-10 15:27:06 · 60 阅读 · 1 评论 -
C++入门
/ 命名空间中可以定义变量/函数/类型int val;原创 2023-09-16 15:39:36 · 27 阅读 · 1 评论 -
C++内存管理
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 1.引用头文件stdlib.h2.使用malloc()开辟内存空间3.判断malloc()的返回值是否为空指针4.使用malloc()开辟好的内存空间5.使用free()释放malloc()开辟的内存空间6.将指针置为NULL 有几个点需要注意:1.calloc()函数向内存申请一块连续的空间,并将内存空间都初始化为0。2.calloc()参数num表示分配num个元素的空间,size表示每个元素的原创 2023-10-11 15:33:00 · 111 阅读 · 1 评论 -
运算符重载
就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。如果不做处理的话,在c++中+、-、*、/等运算符只能对基本的常量或变量进行运算,不能在对象之间进行运算。如果希望对象之间也可以进行运算,于是就利用c++的“运算符重载”机制,赋予运算符新机制,就能解决像对象之间+这样的问题。运算符重载的实质是编写以运算符作为名称的函数。不妨把这样的函数称为运算符函数。包含被重载的运算符的表达式会被编译成运算符函数的调用,运算符的操作数称为函数调用时的实参,运算结果就是函数的返回值。原创 2023-10-02 22:52:18 · 44 阅读 · 1 评论 -
类和对象(下)
定义时不添加static关键字,类中只是声明3.类静态成员即可用。原创 2023-10-10 16:16:41 · 30 阅读 · 1 评论 -
vector的核心框架接口的模拟实现
当 _finish触及到_end_of_storage 时,不就说明容量不够了吗?如下所示:原创 2023-11-08 17:45:24 · 49 阅读 · 1 评论 -
priority_queue
① 考虑到如果这里 T 是 string,甚至是更大的对象,传值返回就有一次拷贝构造,代价就大了。一个对象能像函数一样用,看上去很神奇,实际上调用的只是我们重载的 operator() 而已。其实现就是在类中重载 operator(),使得该类具备类似函数的行为,就是一个仿函数类了。很简单,不过值得注意的是,返回堆顶数据的 top 接口,我们用了 const 引用返回。这里定义对象的时候我用的我是小驼峰,这样看上去更像是一个函数了,以假乱真。可以像函数一样使用的对象,称为函数对象。原创 2023-11-15 20:38:16 · 35 阅读 · 0 评论 -
C++中的多态
在虚函数的后面写上 =0,则我们称这个函数为 "纯虚函数"。包含纯虚函数的类,就是抽象类(abstract class),也叫接口类。/* 抽象类 */public:// 纯虚函数抽象类不能实例化出对象,子类即使在继承后也不能实例化出对象:只有重写纯虚函数,子类才能实例化出对象:/* 抽象类 */public:// 如果父类是抽象类,子类必须重写才能实例化public:virtual void Drive() { // 重写cout << "BMW-操控性" << endl;原创 2023-11-22 14:22:29 · 38 阅读 · 1 评论 -
C++map和set封装
set 参数只有 key,但是map除了key还有value。我们还是需要K的红黑树的代码。原创 2023-12-01 17:54:31 · 964 阅读 · 0 评论 -
类和对象(上)
比如:之前在数据结构初阶中,用。原创 2023-09-20 13:10:28 · 38 阅读 · 1 评论 -
C++红黑树
对的理解对的理解。原创 2023-11-28 21:23:47 · 1033 阅读 · 0 评论 -
C++中的虚表
虚函数的重写与覆盖,重写是语法层的叫法,覆盖是原理层的叫法。原创 2023-11-22 15:50:38 · 43 阅读 · 0 评论 -
类和对象(中)
默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。原创 2023-09-20 15:26:30 · 28 阅读 · 1 评论 -
C++中的继承
我们还是拿刚才的 Person 和 Student 举例:派生类 继承方式 基类👇 👇 👇public:// 学号Student 是子类,我们也称之为派生类。Person 是父类,我们也称之为基类。个人觉得,把 Person 和 Student 看作是父子关系是比较容易理解的。子承父业,孩子 Student 从父亲 Person 那里继承一些 "资产" ,这里的继承方式是 public,即公有继承,还有其他的一些继承方式。原创 2023-11-21 22:53:48 · 40 阅读 · 1 评论 -
C++set和map
1. map是关联容器,它按照特定的次序按照key来比较存储由键值key和值value组合而成的元素。2.在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,为其取别名称为pair:3.在内部,map中的元素总是按照键值key进行比较排序的。4. map。原创 2023-11-24 20:11:09 · 767 阅读 · 0 评论