
C++初阶
文章平均质量分 96
三眼五显仙人~
三眼五显仙人,魈,听召,前来守护。
展开
-
【深入理解 C++11 多线程编程:从入门到实践】
如果你直接将变量作为参数传递给线程函数,线程函数会修改一个副本,不会影响到外部变量。如果你希望线程函数修改外部变量,需要使用 std::ref() 或指针,将外部变量的引用或地址传递给线程函数。注意:如果是类成员函数作为线程参数时,必须将this作为线程函数参数。原创 2024-07-24 13:57:05 · 1194 阅读 · 1 评论 -
【C++中的IO流和文件操作精讲】
在C语言中,如果想要将一个整形变量的数据转化为字符串格式,如何去做?原创 2024-07-22 16:44:52 · 779 阅读 · 1 评论 -
C++实现定长内存池
在说内存池之前,我们得先了解一下“池化技术”。所谓“池化技术”,就是程序先向系统申请过量的资源,然后自己进行管理,以备不时之需。之所以要申请过量的资源,是因为申请和释放资源都有较大的开销,不如提前申请一些资源放入“池”中,当需要资源时直接从“池”中获取,不需要时就将该资源重新放回“池”中即可。这样使用时就会变得非常快捷,可以大大提高程序的运行效率。在计算机中,有很多使用“池”这种技术的地方,除了内存池之外,还有连接池、线程池、对象池等。原创 2024-05-26 18:31:59 · 815 阅读 · 0 评论 -
【C++哈希:unordered系列容器&哈希概念&哈希冲突&模拟实现】
线性探测优点:实现非常简单。原创 2024-04-13 15:36:50 · 850 阅读 · 4 评论 -
【C++学习笔记】C++11新特性!你绝对不能错过的干货!
在C++11之后,auto还可以用作返回值,但不建议使用。原创 2024-04-23 23:21:55 · 1150 阅读 · 1 评论 -
【C++学习笔记】C++类型转换!你绝对不能错过的干货!
1、C++中的4种类型转换分别是:____ 、____ 、____ 、____。⭐。原创 2024-04-23 15:49:46 · 937 阅读 · 0 评论 -
【C++学习笔记】C++特殊类设计!你绝对不能错过的干货!
拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝, 只需让该类不能调用以及即可。⭐⭐1. 设置成私有:如果只声明没有设置成private,用户自己如果在类外定义了,就不能禁 止拷贝了⭐2. 只声明不定义:不定义是因为该函数根本不会调用,定义了其实也没有什么意义,不写 反而还简单,而且如果定义了就不能防止成员函数内部拷贝了。⭐在c++标准库中对于IO流的对象不能拷贝就是采用的c++11的方式。原创 2024-04-22 21:52:26 · 861 阅读 · 5 评论 -
【C++学习笔记】C++智能指针!你绝对不能错过的干货!
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。// 1.内存申请了忘记释放// 2.异常安全问题Func();// 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.同时还有一种情况。原创 2024-04-22 17:25:23 · 1057 阅读 · 22 评论 -
【C++学习笔记】C++异常处理!你绝对不能错过的干货!
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家 随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了// 服务器开发中通常使用的异常继承体系public:, _id(id){}protected:// 错误描述int _id;// 错误编号// 继承和多态public:{}return str;原创 2024-04-20 18:27:22 · 1118 阅读 · 20 评论 -
【C++map和set容器:AVL树、红黑树详解并封装实现map和set】
int _bf;,_bf(0),_kv(kv){}// 节点的颜色RED,BLACK// 红黑树节点的定义,_kv(kv),_col(RED){}思考:在节点的定义中,为什么要将节点的默认颜色给成红色的?这里我们可以想象一下,如果我们将插入的节点的默认颜色设置为黑色,那么该条路径上的黑色节点就会增加一个,为了满足对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点。原创 2024-03-14 20:43:22 · 975 阅读 · 31 评论 -
【探索C++容器:set和map的使用】
1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对 子集进行直接迭代。原创 2024-03-09 17:52:31 · 912 阅读 · 32 评论 -
【二叉搜索树】
看上去挺对,但是我们忽略了一个问题,我们申请的结点给到_cur指针了,而且它时一个局部变量,出了作用域不仅消耗了,而且还会出现内存泄漏,我们此时要解决问题,就要与父指针进行链接,所以此时我们要找到_cur的父节点。但是我们这里的中序无法调用,因为我们的中序要求传入根结点,如果不传入根节点我们这里就无法递归了,我们这里有两种解决方法,第一个方法是写一个获取根节点的函数,因为我们的根节点是私有的,或者我们还可以套一层子函数。我们首先来看第一种情况,当左为空,将右托付给父亲,此时是托付给父亲的右还是父亲的左呢?原创 2024-02-04 19:49:01 · 889 阅读 · 0 评论 -
【C++栈和队列:数据结构中的经典组合,高效处理先进先出与后进先出问题的最佳方案】
1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端 提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用。原创 2024-02-03 15:11:30 · 1655 阅读 · 1 评论 -
【C++模板特化的奥秘:个性化定制函数与类,掌握代码实现的无限可能】
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链 接起来形成单一的可执行文件的过程称为分离编译模式。原创 2024-02-03 14:30:18 · 898 阅读 · 0 评论 -
【C++ STL链表:节点串联,数据无限,解锁高效插入、删除与迭代的奇妙能力】
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是带头双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。4. 与其他序列式容器相比,list最大的缺陷是不支持任意位置的随机访问。原创 2024-02-03 14:17:09 · 1227 阅读 · 0 评论 -
【C++继承策略:构筑类的层次体系,掌握复用与派生的智慧】
下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。我们先来看一下继承和组合class Apublic:protected:private:int _a;//组合:每个B对象中都有一个A对象//黑箱复用:不清楚内部构成,测试其外观,功能//比如卫生纸:测试纸张抽数,纸张厚度,纸张味道class Bpublic:_a.func1();//保护不可访问private:A _a;//继承:每个派生类对象都是一个基类对象。原创 2024-02-03 13:37:32 · 963 阅读 · 0 评论 -
【C++多态奥秘:同形异义,编织面向对象的多彩世界】
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 = 0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口 类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,因为它会继承来自父类的纯虚函数,只有重写纯虚函数,派生类才能实例化出对象。原创 2024-02-03 13:31:24 · 1091 阅读 · 0 评论 -
【探索C++容器:vector的使用和模拟实现】
我们先来看一下vector文档中的构造函数我们先来直接看看第二个构造函数的使用:创建一个包含n个元素的容器。每个元素都是val的副本运行结果:我们再来看看第三个构造函数:创建一个包含与范围 [first, last) 中的元素数量相同的容器,每个元素都是从该范围中对应元素构造而来的,顺序相同。while (it1!++it1;运行结果:我们这里的迭代器区间能不能是其他容器,比如string。//string是char类型,这里模板参数需要转为char。原创 2024-01-18 20:03:18 · 1129 阅读 · 12 评论 -
【字符串探秘:手工雕刻的String类模拟实现大揭秘】
就像一个家庭中有两个孩子,但父母只买了一份玩具,两个孩子愿意一块玩,则万事大吉,万一不想分享就 你争我夺,玩具损坏。可以采用深拷贝解决浅拷贝问题,即:每个对象都有一份独立的资源,不要和其他对象共享。父母给每个孩 子都买一份玩具,各自玩各自的就不会有问题了。原创 2023-11-30 22:50:10 · 1684 阅读 · 55 评论 -
【探讨C++内存管理:有效避免内存泄漏与提高性能的关键】
int main()// malloc不方便解决动态申请的自定义类型对象的初始化问题// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间\还会调用构造函数和析构函数// new的本质:开空间+调用构造函数初始化// delete的本质:调用析构函数+释放空间//error C2521: 析构函数 不带任何参数free(p1);原创 2023-11-22 09:21:23 · 1259 阅读 · 91 评论 -
【编码艺术:掌握String类函数接口的妙用指南】
1. string是表示。原创 2023-11-30 19:20:55 · 987 阅读 · 46 评论 -
【“C++ 精妙之道:解锁模板奇谭与STL精粹之门“】
class 类模板名// 类内成员定义public://类里面声明~Stack()_top = 0;int _top;//规定缺省参数在声明处提供缺省值Stack<T>::Stack(int capacity)//类外面定义_top = 0;注意:类模板声明和定义分离不能到两个文件上,会发生链接错误。STL(standard template libaray-标准模板库)是C++标准库的重要组成部分,不仅是一个可复用的组件库,原创 2023-12-05 21:59:20 · 1974 阅读 · 42 评论 -
【C++类和对象下:解锁面向对象编程的奇妙世界】
的。原创 2023-11-13 22:57:23 · 424 阅读 · 47 评论 -
【C++类和对象中:解锁面向对象编程的奇妙世界】
7. 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。可以不传参数就调用构造,都可叫。原创 2023-11-06 23:02:26 · 941 阅读 · 67 评论 -
【C++类和对象上:解锁面向对象编程的奇妙世界】
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字,{}中为类的主体注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。原创 2023-11-01 16:46:48 · 319 阅读 · 73 评论 -
【C++入门:C++世界的奇幻之旅】
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。现在我们来介绍一下命名空间,注意:C++是兼容90%的C语言。当我们加入头文件<stdlib.h>时程序就报错了,因为该文件下有一个rand函数,和我们当前的全局变量rand出现了命名冲突的问题。// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决int main()return 0;原创 2023-10-24 14:08:35 · 670 阅读 · 69 评论