
C++从入门到起飞
文章平均质量分 93
C++从入门到起飞!
秋风起,再归来~
大二在读,初识编程~全栈领域新星创作者,分享自己学习心得。欢迎各位大佬来到我的博客指导!编程之路,道阻且长,行则将至!未来我们一起加油!
展开
-
C++从入门到起飞之——输入&输出 全方位剖析!
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。//变量int rand;//函数return;//类,后面会讲到class testpublic:return;int b;• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。• C++中域有函数。原创 2024-07-12 12:40:17 · 1763 阅读 · 60 评论 -
C++从入门到起飞之——缺省参数&函数重载&引用 全方位剖析!
引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。⽐如:⽔壶传中李逵,宋江叫"铁⽜",江湖上⼈称"⿊旋 ⻛";林冲,外号豹⼦头;引用的定义:类型& 别名=引用对象//引用的定义int a = 0;// 引⽤:b和c是a的别名int& b = a;int& c = a;// 也可以给别名b取别名,d相当于还是a的别名int& d = b;++d;// 这⾥取地址我们看到是⼀样的。原创 2024-07-13 21:54:59 · 1584 阅读 · 85 评论 -
C++从入门到起飞之——inline&nullptr关键字 全方位剖析!
分离会导致链接错误。因为inline被展开,就没有函数地 址,链接时会出现报错。原创 2024-07-17 12:22:09 · 1415 阅读 · 76 评论 -
C++从入门到起飞之——类的定义&实例化 全方位剖析!
•class为定义类的关键字,Test为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或 者成员函数。class Test//成员函数//成员变量int _a;int _b;• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_或者m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。• C++中struct也可以定义类。原创 2024-07-18 11:49:02 · 3039 阅读 · 85 评论 -
C++从入门到起飞之——this指针 全方位剖析!
原因就在于我们对类类型进行操作(p->Print)时并不是对指针本身进行解引用操作,而是通过传参调用Print函数,我们只是传了空指针,并没有对空指针进行任何访问,所以程序不会报错。通过下⾯两份代码对⽐,我们发现C++实现Stack形态上还是发⽣了挺多的变化,底层和逻辑上没啥变 化。那么这⾥就要看到C++给了 ⼀个隐含的this指针解决这⾥的问题。原创 2024-07-19 11:42:27 · 2105 阅读 · 70 评论 -
C++从入门到起飞之——构造函数&析构函数 全方位剖析!
⽆参构造函数。原创 2024-07-21 21:31:58 · 1272 阅读 · 64 评论 -
C++从入门到起飞之——拷贝构造函数&(赋值)运算符重载 全方位剖析!
内置类型。原创 2024-07-22 11:12:54 · 1393 阅读 · 81 评论 -
C++从入门到起飞之——const成员函数&Date类实现 全方位剖析!
下面代码是我在实现日期类时的检测(仅供参考)这个文件中定义我们要实现的全部成员函数!⽐如我们不想让别⼈取到当 前类对象的地址。俩个对象的地址都是胡乱返回的(真的损!const取地址运算符重载。成员函数进行声明和定义分离。成员函数参数列表的后 ⾯。普通取地址运算符重载。0、检查日期是否有效。我们下期不见不散~~原创 2024-07-23 13:22:59 · 1484 阅读 · 82 评论 -
C++从入门到起飞之——初始化列表&类型转换&static成员 全方位剖析!
如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~必须放在初始化列表位置进⾏初始 化,否则会编译报错。不在初始化列表初始化的成员也会⾛初始化列表。初始化列表出现的的先后顺序⽆ 关。相关内置类型为参数的构造函数。每个成员变量定义 初始化。没有默认构造的类类型变量。括号中的初始值或表达式。没有显⽰在初始化列表。我们下期不见不散~~原创 2024-07-26 10:00:44 · 2096 阅读 · 89 评论 -
C++从入门到起飞之——友元&内部类&匿名对象&对象拷贝时的编译器优化 全方位剖析!
任何地⽅声明,不受类访问限定符限制。原创 2024-07-27 10:26:09 · 812 阅读 · 68 评论 -
C++从入门到起飞之——内存管理(万字详解) 全方位剖析!
new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间 还会调用构造函数(初始化对象)和析构函数(释放资源)!class Apublic:A(int a=0):_a(a)cout原创 2024-07-28 20:50:38 · 4497 阅读 · 76 评论 -
C++从入门到起飞之——模版初阶 全方位剖析!
class 类模板名// 类内成员定义//类模版public:_top = 0;//声明private:T* _array;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲template//必须要有前置声明if (_capacity == _top)//容量满了就扩容//更新容量//把数据拷贝到新空间//释放旧空间//让_array指向新空间//临时变量tmp出作用域后自动销毁int main()原创 2024-07-30 11:45:10 · 1268 阅读 · 108 评论 -
C++从入门到起飞之——string类用法 全方位剖析!
我们先看到上面的一段代码,其中关键字auto(下文有专门针对auto的讲解,这里知道一些用法就没问题了)先定义了一个变量s,它会自动提取到字符串s2中的每一个字符并识别它的类型从而进行匹配,而范围for遍历会自动遍历字符串,并输出每一个字符。》对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。》在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、 快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。原创 2024-08-03 16:39:53 · 1880 阅读 · 115 评论 -
C++从入门到起飞之——string类的模拟实现 全方位剖析!
🌈个人主页:秋风起,再归来~🔥系列专栏:C++从入门到起飞 🔖克心守己,律己则安>string.h在string.h中我们用来包含各种头文件以及定义我们的string类和非成员函数的声明!注意:在string.h中string类的定义和非成员函数的声明放到我们自己定义的命名空间my_string中(原因就是为了和库里面的std:string类进行区分!)>string.cpp在string.cpp中我们来完成string类中一些(类里面短小频繁调用的函数声明和定义不用分离)成员函原创 2024-08-07 13:38:29 · 1929 阅读 · 121 评论 -
C++从入门到起飞之——深浅拷贝&string类补充 全方位剖析!
在构造时,将资源的计数给成1,每增加一个对象使用该 资源,就给计数增加1,当某个对象被销毁时,先给该计数减1,然后再检查是否需要释放资源, 如果计数为1,说明该对象时资源的最后一个使用者,将该资源释放;如果,this的_str为随机值,那么在交换后,tmp在析构时会释放随机的空间。如果对象中管理资源,最后就会导致 多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该 资源已经被释放,以为还有效,所以当继续对资源进项操作时,就会发生发生了访问违规。但是,为了让效率提高,原创 2024-08-09 17:56:22 · 1391 阅读 · 115 评论 -
C++从入门到起飞之——vector模拟实现 全方位剖析!
。原创 2024-08-26 18:25:19 · 1885 阅读 · 88 评论 -
C++从入门到起飞之——list使用 全方位剖析!
假如我们想要在list的正向迭代器后的第三位置插入一个2,在上面的这种写法就不再支持了!而我们之前在string和vector的使用时这样玩是完全没有问题的!那是为什么呢!通过查阅文档资料,我们可以发现在list下的的迭代器是bidirectional iterator(双向迭代器)那双向迭代器又是什么意思呢?下面我就和大家总结一下迭代器从功能和性质上的分类:>从功能上可分为以下四种:1、正向迭代器2、反向迭代器3、正向常量迭代器4、反向常量迭代器。原创 2024-08-28 21:19:27 · 1321 阅读 · 88 评论 -
C++从入门到起飞之——list模拟实现 全方位剖析!
但是,list如果我们还是使用原生指针的话就完全做不到迭代器的效果,因为我们对节点指针*取到的是节点本身,而不是节点里面的数据,对节点++或--,因为链表不是连续的物理空间,所以我们并不能拿到前一个或后一个的迭代器反而让迭代器成了野指针!list就是我们所熟悉的数据结构链表,通过查看源码以及我们对链表的了解我们知道在类模版list中的成员变量一个是指向有效链表的哨兵卫头结点_head,另一个是记录有效元素个数的_size,而链表中的有效元素的存储地址空间不是连续的,所以并没有容量capacity的概念!原创 2024-08-30 21:55:06 · 1965 阅读 · 99 评论 -
C++从入门到起飞之——stack&queue&deque 全方位剖析!
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设 计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端 进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与 list比较,空间利用率比较高。deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个 动态的二维数组。原创 2024-09-06 15:07:27 · 1880 阅读 · 81 评论 -
C++从入门到起飞之——priority_queue(优先级队列) 全方位剖析!
1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素 中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶 部的元素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue 提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的 顶部。4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。原创 2024-09-07 15:21:18 · 2479 阅读 · 91 评论 -
C++从入门到起飞之——模版进阶&分离编译 全方位剖析!
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有 目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误不过由于模版超高的优越性,这点缺陷也就显得微不足道了!原创 2024-09-09 11:04:41 · 1387 阅读 · 94 评论 -
C++从入门到起飞之——继承上篇 全方位剖析!
下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以 既叫基类/派⽣类,也叫⽗类/⼦类)原创 2024-09-13 08:54:20 · 1609 阅读 · 80 评论 -
C++从入门到起飞之——继承下篇(万字详解) 全方位剖析!
所以,我们一定要记住,无论在什么情况下,我们都不要显示调用父类的析构函数,多次析构可能会引起程序的崩溃!5. 派⽣类对象初始化。原创 2024-09-16 15:18:28 · 1443 阅读 · 100 评论 -
C++从入门到起飞之——多态 全方位剖析!
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票。原创 2024-09-22 19:06:53 · 1901 阅读 · 106 评论 -
C++从入门到起飞之——二叉搜索树 全方位剖析!
场景1:⼩区⽆⼈值守⻋库,⼩区⻋库买了⻋位的业主⻋才能进⼩区,那么物业会把买了⻋位的业主的 ⻋牌号录⼊后台系统,⻋辆进⼊时扫描⻋牌在不在系统中,在则抬杆,不在则提⽰⾮本⼩区⻋辆,⽆ 法进⼊。场景2:商场⽆⼈值守⻋库,⼊⼝进场时扫描⻋牌,记录⻋牌和⼊场时间,出⼝离场时,扫描⻋牌,查 找⼊场时间,⽤当前时间-⼊场时间计算出停⻋时⻓,计算出停⻋费⽤,缴费后抬杆,⻋辆离场。场景2:检查⼀篇英⽂⽂章单词拼写是否正确,将词库中所有单词放⼊⼆叉搜索树,读取⽂章中的单 词,查找是否在⼆叉搜索树中,不在则波浪线标红提⽰。原创 2024-09-29 15:01:09 · 1247 阅读 · 85 评论 -
C++从入门到起飞之——(multi)set与(multi)map的的使用 全方位剖析!
• set的声明如上,T就是set底层关键字的类型• set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模 版参数• set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。• ⼀般情况下,我们都不需要传后两个模版参数。• set底层是⽤红⿊树实现,增删查效率是O(logN),迭代器遍历是⾛的搜索树的中序,所以是有序 的。原创 2024-10-10 23:16:52 · 2180 阅读 · 93 评论 -
C++从入门到起飞之——AVL树 全方位剖析!
• 更新后parent的平衡因⼦等于1或-1,更新前更新中parent的平衡因⼦变化为0->1或者0->-1,说 明更新前parent⼦树两边⼀样⾼,新增的插⼊结点后,parent所在的⼦树⼀边⾼⼀边低,parent所 在的⼦树符合平衡要求,但是⾼度增加了1,会影响arent的⽗亲结点的平衡因⼦,所以要继续向上 更新。0不是更 好的平衡吗?• 插⼊结点,会增加⾼度,所以新增结点在parent的右⼦树,parent的平衡因⼦++,新增结点在 parent的左⼦树,parent平衡因⼦--原创 2024-10-13 14:51:17 · 1681 阅读 · 80 评论 -
C++从入门到起飞之——红黑树 全方位剖析!
c变成课这颗树新的根,这样⼦树⿊⾊结点的数量不变,没有连续的红⾊结点了,且 不需要往上更新,因为c的⽗亲是⿊⾊还是红⾊或者空都不违反规则。c变成课这颗树新的根,这样⼦树⿊⾊结点的数量不变,没有连续的红⾊结点了,且 不需要往上更新,因为c的⽗亲是⿊⾊还是红⾊或者空都不违反规则。c为红,p为红,g为⿊,u不存在或者u存在且为⿊,u不存在,则c⼀定是新增结点,u存在且为⿊,则 c⼀定不是新增,c之前是⿊⾊的,是在c的⼦树中插⼊,符合情况1,变⾊将c从⿊⾊变成红⾊,更新上 来的。,我们只需要进行变色。原创 2024-10-18 14:43:54 · 2019 阅读 · 72 评论 -
C++从入门到起飞之——红黑树封装map和set 全方位剖析!
我们在使用[]时,如果map中有和我们外面传递的key相同的key,那insert就会插入失败并且返回这个key的迭代器。map和set迭代器的实现其实思路与list迭代器的实现几乎一样,它们都是由一个一个的节点组成的。如果当前节点的右为空,则说明当前节点的中序已近完毕,如果当前节点是父亲的右,说明父亲的中序也完毕,所以我们要找到祖先节点中是父亲的左的那个节点,那++后的节点就是就是父亲。无论是set还是map的查找都是根据key来进行的,所以我们的红黑树类模版的第一个参数类型是接受上层传递过来的K类型。原创 2024-10-27 11:21:34 · 1499 阅读 · 80 评论 -
C++从入门到起飞之——开放定址法实现哈希表 全方位剖析!
我们定义一个HashTable对象,那么我们就可以复用insert逻辑进行新表和旧表的重新映射,因为在复用insert逻辑之前,我们已经进行了2倍扩容,所以insert决不会循环进入扩容逻辑,只会走插入逻辑!我们的Hash映射都是通过无符号整形来确定key在表中的位置,但是,如果外层的key类型并不是无符号整形如string,浮点数,甚至是负数时,上面代码的逻辑就有大问题了!C++标准中设计了一个获取素数的函数,扩容时,我们只需要将当前表的大小传给这个函数,我们就能获取到接近2倍的素数!原创 2024-11-06 12:43:59 · 1516 阅读 · 38 评论