C++
文章平均质量分 91
帝国无伤
这个人很懒,什么都没没留~
展开
-
【C++】C++基础知识
目录一.命名空间1.命名空间的定义2.命名空间使用3.说明二.C++输入&输出三.缺省参数1.缺省参数的概念2.缺省参数分类3.说明一.命名空间1.命名空间的定义namespace关键字 + 命名空间的名字 + {}。{}中即为命名空间的成员。命名空间中的内容,既可以定义变量,也可以定义函数命名空间可以嵌套同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中//定义命名空间namespace N{ int a; int b; int Add(in原创 2021-05-23 12:04:32 · 3082 阅读 · 1 评论 -
【C++11】常见智能指针总结
内存泄漏指因为疏忽或错误造成程序未释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理空间上的消失,而是我们的应用程序在分配到某块内存空间后,因为设计错误,失去了对该块内存的控制,因而造成了这块内存资源的浪费。// 1、内存申请了,但是忘记释放// 2、抛异常导致内存泄漏try//上面抛出了异常,导致 delete[] 没有执行内存泄漏分类堆内存泄漏(Heap Leak)原创 2024-05-06 10:12:41 · 642 阅读 · 0 评论 -
【C++11】异常机制
异常是一种处理错误的方式:当一个函数发现自己无法处理的错误时就可以抛出异常,让这个函数的直接或间接调用者去处理这个错误。throw:当问题出现时,程序会抛出一个异常(可以是任意类型的对象)。这是通过使用 throw 关键字来完成的。try:try 块中的代码标识“将被激活的特定异常”,它后面通常跟着一个或多个 catch 块。catch:在您想要处理问题的地方,通过异常处理程序捕获异常,catch 关键字用于捕获异常,可以有多个 catch 进行捕获。原创 2024-04-03 16:57:55 · 803 阅读 · 0 评论 -
【C++】类和对象(上)
文章目录一. 面向过程和面向对象初步认识二. 类的定义三. 类的访问限定符及封装1.访问限定符2. 封装四. C语言中结构体和C++类的区别和联系1. 区别2.联系五. 类的作用域1. 作用域解析符2. 有关private的说明六. 类的实例化七. 类的大小1. 计算规则2. 说明八. this指针1. 介绍2. this指针的特性3. 说明一. 面向过程和面向对象初步认识C语言:是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++ :是基于面向对象的,关注的是对象,将一原创 2021-06-05 13:26:32 · 156 阅读 · 5 评论 -
【C++】类和对象(中)
文章目录一. 说明二. 构造函数1. 概念2. 特性3. 调用方式4. 默认的构造函数(不传参就可以调用的)4.1 分类4.2 编译器默认生成的构造函数5. 成员变量的命名风格三. 析构函数1. 概念2. 特性3.编译器默认生成的析构函数一. 说明PS:以下代码均以日期类为例二. 构造函数1. 概念构造函数是一个特殊的成员函数,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次2. 特性无返回值函数名与类名相同构造函数可以重载原创 2021-06-05 13:28:09 · 186 阅读 · 1 评论 -
【C++】类和对象(下)
文章目录一. 构造函数中成员变量的赋值与成员变量的初始化1. 构造函数体内成员变量的赋值2. 构造函数体外成员变量的初始化2.1 初始化列表概念2.2 初始化列表的几点说明3. explicit关键字二. static成员1. 概念2. 特性一. 构造函数中成员变量的赋值与成员变量的初始化1. 构造函数体内成员变量的赋值构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。2. 构造函数体外成员变量的初始化2.1 初始化列表概念成员变量原创 2021-06-05 13:35:54 · 122 阅读 · 1 评论 -
【C++】日期类实现
日期类介绍日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,两个日期的比较,日期加减天数,日期自增和自减,日期减日期等(使用运算符重载)日期类实现代码#include<iostream>using namespace std;class Date{public: //获取某年某月的天数 static int GetMonthDay(int year, int month) { //该年为平年的时候(2月只有28天) int monthDays[原创 2021-03-25 23:18:30 · 720 阅读 · 0 评论 -
【C++】内存管理
文章目录一. 全局/局部和静态/非静态类型变量的区别二. C/C++内存分布三. C/C++内存管理方式1. C内存管理方式1.1 malloc/calloc/realloc/free的使用方法2.1 malloc/calloc/realloc使用效果的区别2. C++内存管理方式四.一. 全局/局部和静态/非静态类型变量的区别二. C/C++内存分布不同变量存在不同的空间中,这些空间主要分为栈,堆,数据段,代码段。栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的堆用于程序运原创 2021-06-05 13:59:10 · 138 阅读 · 3 评论 -
【C++】string类基础知识
文章目录一. 有关string类的几点说明二. string类的常用接口1. string类对象的常见构造2. string类对象的容量操作一. 有关string类的几点说明string是表示字符串的字符串类在使用string类时,必须包含 #include< string > 头文件以及using namespace std;二. string类的常用接口1. string类对象的常见构造string()说明:构造一个空的字符串,里面没有字符string(原创 2021-07-25 17:28:21 · 296 阅读 · 1 评论 -
【C++】string类的模拟实现
文章目录一. 传统版写法的string类1. private成员2. 构造函数3. 析构函数4. 拷贝构造和赋值重载4.1 什么是浅拷贝?4.2 浅拷贝带来的问题4.3 深拷贝完成拷贝构造和赋值重载5. 完整代码一. 传统版写法的string类主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。1. private成员就是一个C语言中的字符串指针class string{public:private: char* _str;};2. 构造函数我们设计一个全缺省的原创 2021-07-29 12:00:39 · 438 阅读 · 0 评论 -
【C++11】包装器和bind
包装器是个类模板,它的定义在头文件 functional 中下面看看具体的示例:也就是说,在 function 的模板列表中,第一个参数是返回值的类型,随后在括号里依次传入形参的类型;而后在赋值的时候,只需要让其等于已经定义过的可调用对象,这样就算包装完成了,最后我们可以使用这个包装好的对象来代替之前的可调用对象,去执行它们的功能。原创 2024-03-10 17:38:57 · 921 阅读 · 0 评论 -
【C++11】lambda 表达式
捕捉列表。该列表总是出现在 lambda 表达式的开始位置,它是 lambda 表达式的标识。编译器根据 [ ] 来判断接下来的代码是否为 lambda 表达式,捕捉列表能够捕捉上文作用区中的变量供 lambda 表达式使用。:参数列表。与普通函数的参数列表一致(可以指定参数是传值还是传引用,或者是否是 const),如果不需要参数传递,则可以连同括号一起省略。mutable。原创 2024-03-10 16:49:46 · 951 阅读 · 0 评论 -
【C++】继承知识点总结
文章目录一. 继承的概念及定义1.继承的概念2. 继承的定义2.1 定义格式2.2 继承关系和访问限定符2.3 继承后基类成员访问方式的变化2.4 几点补充二. 基类和派生类对象赋值转换1. 概念2. 补充说明一. 继承的概念及定义比如我们要定义学生类(Student)和老师类(Teacher),都是人这两个类都包括姓名,年龄等基础的成员变量。写两个类就要重复声明两组姓名和年龄的成员变量,搞起来麻烦,能不能单独写一个Person类里面有姓名和年龄的成员变量,让学生类和老师类继承下来,就不用单独声明姓名和原创 2021-10-18 18:39:05 · 840 阅读 · 0 评论 -
【C++11】函数的可变参数模板
下面就是一个基本可变参数的函数模板/*- Args是一个模板参数包- args是一个函数形参参数包- 声明一个参数包 Args...args,这个参数包中可以包含0到任意个模板参数*/{}上面的参数 args 前面有省略号,所以它就是一个可变模版参数,我们把带省略号的参数称为“参数包”,它里面包含了0到N(N>=0)个模版参数。我们可以实例化上面的函数模板:传入任意类型、数量的参数{}int main()// 1、向参数包传入一个整型参数// 2、传入一个整型和一个字符。原创 2023-10-22 21:23:37 · 211 阅读 · 0 评论 -
【C++】特殊类设计
拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。:将基类的构造函数私有化,这样派生类中就调不到基类的构造函数,也就无法继承。:通过 final 关键字修饰基类,表示该类不能被继承。函数,只需将该函数屏蔽掉即可。因为 new 在底层调用。原创 2023-09-28 17:37:31 · 181 阅读 · 0 评论 -
【C++】单例模式
单例模式是属于设计模式的一种,那什么是设计模式呢?设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法一样。最开始部落之间打仗时都是人拼人的对砍;后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。孙子兵法就类似于一种打仗的“设计模式”。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;原创 2023-09-29 10:59:49 · 594 阅读 · 0 评论 -
【C++】模板初阶
文章目录一. 泛型编程二. 函数模板1. 概念2. 格式3. 函数模板的原理4. 函数模板参数的实例化5. 函数模板参数的匹配原则一. 泛型编程编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。二. 函数模板1. 概念函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生特定类型的模板函数。PS:模板和类一样,都要在类外面声明2. 格式template<typename T1, typename T2,…,typename Tn&原创 2021-07-19 14:51:47 · 198 阅读 · 0 评论 -
【C++】vector 模拟实现
文章目录一.vector介绍二. vector的模拟实现1. private成员变量及迭代器2. 容量操作接口2.1 size和capacity2.2 reserve2.2 resize3. 默认成员函数3.1 构造函数3.2 拷贝构造3.3 赋值重载4. 修改操作接口4.1 insert4.2 erase一.vector介绍vector是表示可变大小数组的序列容器就像数组一样,vector也采用连续的存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不原创 2021-08-05 16:01:39 · 1624 阅读 · 5 评论 -
【C++】深入理解浅拷贝问题
文章目录一. 浅层浅拷贝问题二. 深层浅拷贝问题三. 类型萃取一. 浅层浅拷贝问题问题分析我们在学C语言的结构体的时候知道,可以用一个结构体对象去拷贝出另外一个结构体对象,其原理是通过memcpy来实现的,当时我们看到的结果确实是拷贝出了另一个值相同的结构体对象。我们来看看memcpy的拷贝原理,其实就是逐个字节的来完成拷贝。void* memcpy(void* dest, const void* src, size_t num)//传入数据可能是各种类型的,所以用void*接收{原创 2021-08-05 06:31:29 · 1795 阅读 · 1 评论 -
【C++】list 模拟实现
list 容器的迭代器不再是像 string 或者 vector 那样的原生指针了,首先因为 list 的各个节点在物理空间上不是连续的,我们不能直接对节点的地址进行 ++ / - - 得到其前、后位置的迭代器。因为 list 类的底层是带头双向循环链表,所以我们只要知道头结点,就可以通过它的 _next 得到第一个节点,通过它的 _prev 得到最后一个节点,对实现链表的遍历和插入操作很方便。因为物理空间上的不连续,迭代器就不是原生指针,不能拿到节点的地址直接进行解引用,自增,自减等操作。原创 2021-08-15 17:00:40 · 402 阅读 · 0 评论 -
【C++】模板进阶
文章目录一. 模板参数1. 类型模板参数2. 非类型模板参数二. 模板的特化1. 概念2. 函数模板特化3. 类模板特化3.1 全特化3.2 偏特化三.一. 模板参数1. 类型模板参数出现在模板参数列表中,跟在class或者typename之后的参数类型的名称(相当于给类型取别名),调用对应的模板时会根据实参的类型自动匹配,实例化出对应的函数或类对象。// 实现两个数相加的函数模板template<class T>T Add(T x1, T x2){ return x1 + x原创 2021-09-25 14:56:54 · 140 阅读 · 0 评论 -
【C++】IO流知识点总结
文章目录一. C语言和C++的输入输出1. 优缺点比较2. scanf对string类对象操作时带来的几个问题2.1 string类框架介绍2.2 问题一:scanf输入时产生的错误2.3 问题二:scanf输入正确,用cout输出时产生的错误二. 输入输出缓冲区1. 基本概念2. 输入缓冲区的提取规则3. 输出缓冲区的刷新规则三. OJ中的连续输入一. C语言和C++的输入输出1. 优缺点比较C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入原创 2021-10-03 15:07:31 · 272 阅读 · 0 评论 -
【C++】多态学习总结
文章目录一. 多态的概念二. 多态的定义和实现1. 虚函数2. 虚函数的重写(覆盖)3. 多态的构成条件4. C++11 override 和 final5. 重载、覆盖(重写)、隐藏(重定义)的对比三. 抽象类1. 实现继承和接口继承2. 概念四. 多态的原理1. 虚函数表2. 再次理解虚表指针、虚表、虚函数3. 多态的实现原理4. 动态绑定与静态绑定五. 多继承关系的虚函数表1. 单继承中的虚函数表2. 多继承中的虚函数表3. 总结一. 多态的概念通俗来说,就是多种形态,具体点就是去完成某个行为,当原创 2021-11-21 02:38:51 · 971 阅读 · 0 评论 -
【STL】set、map的使用介绍
文章目录一. pair键值对1. 概念2. 构造方法二. set1. 概念2. 补充说明2. 使用介绍2.1 set的构造2.2 set增加元素 --- insert2.3 set删除元素 --- erase2.4 set查找元素 --- find三. multiset1. 介绍2. multiset与set的区别四. map1. 概念2. 补充说明3. 使用介绍3.1 map的构造3.2 map增加元素 --- insert3.3 map删除元素 --- erase3.4 map查找元素 --- find原创 2022-01-15 16:25:16 · 379 阅读 · 0 评论 -
【C++】AVL树模拟实现
文章目录一. 什么是AVL树?二. 为什么要有AVL树一. 什么是AVL树?当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1,达到高度平衡,即可降低树的高度,从而减少平均搜索长度。如果一棵二叉搜索树是高度平衡的,它就是AVL树。空树也算AVL树,AVL树一般具有一下性质:节点的平衡因子 = 右子树高度 - 左子树高度。绝对值不大于1它的左右子树都是AVL树二. 为什么要有AVL树...原创 2022-02-22 17:13:08 · 583 阅读 · 0 评论 -
【C++】红黑树的简单模拟实现
文章目录一. 什么是红黑树?1. 基本概念2. 红黑树的特性二. 为什么要有红黑树?1. 红黑树和搜索树2. 红黑树和平衡树三. 红黑树插入操作实现一. 什么是红黑树?1. 基本概念红黑树和AVL树类似,是对搜索树的优化。不同于AVL树的绝对平衡,红黑树是近似平衡,即对于每个节点的以它为根的所有路径,其中最长路径的节点数不大于最短路径节点数的2倍。2. 红黑树的特性每个节点不是红色就是黑色,其中根节点为黑红色节点不连续,即红色节点的左右孩子只能为黑色每个节点,以它为根的所有路径中黑色节点的数原创 2022-02-22 17:15:33 · 443 阅读 · 0 评论 -
【C++】map、set模拟实现
文章目录一. 整体框架梳理二. 节点类三. 迭代器1. 迭代器的基本框架2. operator++ 和 operator- -3. operator* 和 operator->4. operator== 和 operator!=5. 迭代器完整代码四. 红黑树1. 红黑树基本框架2. begin()和end()3. empty()和size()4. Insert 和 Find5. 红黑树完整代码五. map和set1. map、set的基本框架2. map、set和红黑树之间的关系3. map、set原创 2022-02-22 17:16:35 · 557 阅读 · 1 评论 -
【C++11】琐碎知识+右值引用
文章目录一. C++简介二. 列表初始化1. C++98中{}的初始化问题2. C++11中{}的初始化问题2.1 内置类型的列表初始化2.2 自定义类型的列表初始化一. C++简介在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98成为C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准1原创 2022-05-04 11:33:44 · 311 阅读 · 0 评论