![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 72
C++
失落的换海迷风
关注我了解最近咨询
展开
-
【力扣】关于二叉树的最近公共祖先问题
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 235. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ri..原创 2021-09-18 13:13:16 · 119 阅读 · 0 评论 -
【C++】翻转汉字(包含字符和汉字)
C语言数组实现void Reverse(char str[]){ int len = strlen(str); int l = 0, r = len - 1; char temp[str_len]; while (l < len) { if (str[l] > 0){ // 非汉字 temp[r--] = str[l++]; } else{ // 汉字 temp[r - 1] = str[l]; temp[r] = str[l + 1];原创 2021-09-18 12:45:44 · 340 阅读 · 0 评论 -
【C++】双目运算符+=的重载(包含友元)
文章目录1、+=重载2、friend重载+=3、运算符3.1 单目运算符3.2 双目运算符3.3 三目运算符4、重载++和重载- -1、+=重载class Complex{public: Complex(int a, int b) : _a(a) , _b(b) {} Complex& operator+= (Complex& other) { this->_a += other._a; this->_b += other._b; retur原创 2021-09-15 21:59:42 · 3616 阅读 · 0 评论 -
【C++】柔性数组
文章目录1、柔性数组2、柔性数组特性3、柔性数组的优势4、柔性数组的使用1、柔性数组C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员。柔性数组定义typedef struct st_type{ int i; int a[0];//柔性数组成员:有些编译器会报错,用下面的}type_a;typedef struct st_type{ int i; int a[];//柔性数组成员}type_a;柔性数组成员需要用 malloc() 对其原创 2021-09-08 22:58:52 · 712 阅读 · 0 评论 -
【C++】特殊类的设计
文章目录1、设计一个只能在堆上创建对象的类2、设计一个只能在栈上创建对象的类3、设计一个只能创建一个对象的类4、设计一个不能被拷贝的类5、设计一个不能被继承的类1、设计一个只能在堆上创建对象的类1)将类的构造函数私有,拷贝构造声明私有。防止别人调用拷贝在站上生成对象。2)提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。class HeapOnly { public: static HeapOnly* CreateObject() { return new HeapOnl原创 2021-05-28 13:40:34 · 68 阅读 · 0 评论 -
【C++】C++类型转换总结
1、C语言类型转换隐式类型转换:编译器在编译期间自动进行转换显式类型转换:用户自己转换void Test(){ int a = 1; double b = a; // 隐式类型转换 int*p = &a; int pa = (int)p; // 显式类型转换} 2、C++四种类型转换转换类型操作符解释const_cast去掉类型的const或volatile属性static_cast无条件转换,静态类型转换dynamic_ca原创 2021-05-27 21:31:17 · 95 阅读 · 1 评论 -
【C++】STL关联式容器之哈希结构
1、概念原创 2021-05-21 21:35:44 · 215 阅读 · 2 评论 -
【C++】STL关联式容器之红黑树
1、概念2、实现原创 2021-05-21 16:25:24 · 790 阅读 · 9 评论 -
【C++】STL关联式容器--set和map
1、键值对用来表示具有一一对应关系的一种结构。SGI-STL中对键值对的定义template <class T1, class T2>struct pair{ typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair(): first(T1()), second(T2()) {} pair(const T1& a, const原创 2021-05-20 09:06:25 · 572 阅读 · 1 评论 -
【C++】总结常见的C++11
1、列表初始化C++98仅支持内置类型的列表初始化std::vector<int> vec{1, 2, 3, 4);C++11支持内置类型和自定义类型的列表初始化class A{public: A(int _a, int _b) : a(_a) , b(_b) {}private: int a; int b;} 2、变量类型推导C++11中,可以使用auto来根据变量初始化表达式类型推导变量的实际类型。2.1 decltype类型原创 2021-05-12 15:50:35 · 163 阅读 · 0 评论 -
【C++】异常控制流详解
文章目录1、概念2、异常3、异常处理4、异常的类别4.1 中断4.2 陷阱4.3 故障4.4 终止4.5 C语言及C++异常处理方式5、LInux / x86-64系统中的异常5.1 Linux / x86-64 故障和终止5.2 Linux / x86-64 系统调用1、概念程序计数器假设一个值的序列 a0, a1, a2, … ,an-1 ,其中ak到ak+1的过度称为控制转移。这样的控制转移序列叫做处理器的控制流。最简单的控制流是一个“平滑的”序列,“平滑流”的突变通常是由跳转、调用和返回造成的原创 2021-05-11 14:52:41 · 388 阅读 · 4 评论 -
【C++】C语言及C++异常处理方式
文章目录1、C语言处理错误的方式2、C++错误处理2.1 try,throw,catch的组合使用2.2 异常的重新抛出2.3 异常安全2.4 异常规范3、自定义异常体系4、常见的C++标准库异常体系5、异常的优缺点1、C语言处理错误的方式1)assert缺点:发生错误,直接终止程序2)返回错误码错误码放在库函数的 errno 中3)C标准库中 setjump 和 longjump 的组合对于已知的错误,提前设置好处理的位置。如果出现错误,就直接跳转到处理异常的位置。#include<原创 2021-05-10 21:36:18 · 367 阅读 · 2 评论 -
【C++】类模板特化的内置类型和自定义类型拷贝的实现
1. 类型#include <iostream>using namespace std;// 对应内置类型struct TrueType{ static bool Get() { return true; }};// 对应自定义类型struct FalseType{ static bool Get() { return false; }};2.模板特化// 处理自定义类型template<class T>struct Type原创 2020-06-03 13:03:48 · 299 阅读 · 0 评论 -
【C++】C/C++内存管理详解
文章目录1、内存分配方式2、堆和栈的区别3、operator new和operator delete3.1 为什么要进行重载?3.2 重载全局的new和delete操作符3.3 类重载new和delete4、有了malloc/free为什么还要new/delete5、内存耗尽的三种解决方法1、内存分配方式在C++中,内存分成五个区,分别是堆、栈、自由存储区、静态存储区和常量存储区。1) 栈执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置原创 2021-05-06 20:43:34 · 1385 阅读 · 22 评论 -
【C++】设计模式----单例模式
1、设计模式设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。2、设计模式的目的为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络。3、单例模式一个类只能创建一个对象,即单例模式。该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 4、饿汉模式程序启动时就创建一个唯一的实例对象。4.1 优点简单4.2 缺点可能会导致进程启动慢,且如果有多个单原创 2021-05-04 15:17:28 · 97 阅读 · 0 评论 -
【排序】冒泡排序及其优化
冒泡排序算是初学者都会写的吧,我的代码竟然没有,这次就跟着排序一起发出来吧!//冒泡排序void BubbleSort(int* array, int size){ for (int i = 0; i < size - 1; ++i) { //j从0或者1开始,决定之后的j<size-i-1或size-i for (int j = 1; j < size -...原创 2020-04-12 19:59:46 · 99 阅读 · 0 评论 -
【C++】智能指针详解及原理简单说明
一、智能指针前提知识1. 为什么需要智能指针?在c++中进行动态内存申请的过程中,容易忘记delete,即使自己没有忘记,但是因为有异常的抛出,所以也不能保证内存进行完全的释放。malloc / new 申请的空间,未得到释放,造成内存泄漏2. 简单理解内存泄漏对开辟的空间未得到释放,导致应用程序对该空间失去控制频繁的开辟空间,没有得到释放,会造成内存的碎片化3.内存泄漏的分类堆内存泄漏:程序执行开辟中new / malloc / realloc开辟的空间,没有释放系统资源泄漏原创 2021-04-15 17:18:50 · 633 阅读 · 0 评论 -
【C++】哈希与哈希冲突
1.常见的搜索方式 循环遍历----->时间复杂度O(n) 二分查找----->时间复杂度O(logN) 利用搜索树来进行数据的管理二叉搜索树AVL树红黑树哈希-----位图,布隆过滤器 2.索引 对于海量数据,在数据的基础上建立索引 索引分为静态索引(书的目录)和动态索引(B-树) 3.哈希概念 如果在存储数据时,通过某种方式,将数据与其存储结构之间建立一种一一对应的映射关系,查找时再按照该种映射方式来查找4.哈希冲突 不同的原创 2021-03-12 22:26:55 · 335 阅读 · 0 评论 -
【C++】面向对象的三大特性---多态
文章目录1.多态的概念2.多态的实现条件3.重写4.多态的实现原理1.多态的概念通俗来说,就是各种形态,具体点就是为了完成某个行为,当不同的对象取完成时会产生出不同的状态2.多态的实现条件 前提:必须在继承的方式下基类中必须要有虚函数,而且子类必须要对基类中的虚函数进行重写虚函数调用:必须(基类)指针或者引用调用虚函数 多态体现:在程序运行时,根据基类的指针或者引用指向不同类的对象调用响应的虚函数虚函数:被关键字virtual修饰的成员函数称为虚函数// 多态class Fru原创 2020-12-20 16:44:23 · 151 阅读 · 0 评论 -
【C++】面向对象的三大特性---继承
文章目录1.继承的概念2.继承方式3.在C++中class和struct的区别4.不同继承方式,基类被不同访问限定符修饰的成员在子类中的权限5.基类和派生类6.继承体系中的作用域:基类和派生类隶属于不同的作用域7.子类对象的构造8.不同的继承体系1.继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有特性的基础上进行拓展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认识过程。以前我们接触的复用的函数复用,继承是类设原创 2020-12-19 23:35:39 · 254 阅读 · 1 评论 -
【C++】string类浅拷贝的解决方式
1.浅拷贝对内存地址的复制,让目标对象指针和源对象指向同一片内存空间,最终在释放的时候造成了多次释放导致程序崩溃如果类中设计到资源管理时,用户必须要显式实现拷贝构造函数以及赋值运算符重载,因为编译器默认是按照浅拷贝的方式生成的 2.深拷贝让每个对象都独立拥有自己的资源—即当发生拷贝构造或赋值时,让每个对象管理自己的资源即可 3.写时拷贝:浅拷贝+引用计数一旦s2要将空间中的内容改变,那么就深拷贝一份给s2,然后在改变s2中的内容,s1中的引用计数-1原创 2020-11-11 17:18:39 · 303 阅读 · 0 评论 -
【C++】STL简介
1.什么是STLC++标准库—>里面的代码都是按照模板来实现的通俗说:就是对常见数据结构的封装(顺序表,链表,栈和队列,二叉树,哈希等)还提供一些通用类型的算法,而且这些算法都非常灵活通用类型的算法:任意类型的数据都要能够处理、与数据类型无关非常灵活:算法具体做什么事情,而是取决于用户使用时所传递的参数 2.STL的六大组件 容器:就是对常见数据结构的封装—>组织数据序列式容器(线性结构)string类vector:动态类型的顺序表list:带头结点的双向原创 2020-11-10 23:41:13 · 116 阅读 · 0 评论 -
【C++】函数模板及类模板详解
1.写一个通用类型的加法函数? 下面代码的缺陷代码的复用性比较低不太好维护并不能将所有的类型重载出来—最多就是将内置类型重载完成,自定义类型无法完成重载 解决方案:写和类型无关的代码,最好的方式就是使用模板int add(int left, int right){ return left + right;}char add(char left, char right){ return left + right;}double add(double left,原创 2020-11-10 23:12:34 · 232 阅读 · 1 评论 -
【C++】C/C++内存管理
1.C/C++内存分布1.栈又叫堆栈,非静态局部变量 / 函数参数 / 返回值等,栈是向下增长的。2.内存映射是高校的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统调用接口创建共享内存,做进程间通信。3.堆用于程序运行时动态内存分配,堆是向上增长的。4.数据段—存储全局数据和静态数据。5.代码段—可执行的代码 / 只读常量 2.C语言中动态内存管理方式void Test(){ int* p1 = (int*)malloc(sizeof(int)); fre原创 2020-10-27 23:14:51 · 209 阅读 · 0 评论 -
【Linux】基础IO
1.C语言操作文件接口 FILE *fopen(const *path, const char *mode);path:待打开的文件(文件路径+文件名称)mode:文件打开方式r:以只读方式打开,当文件不存在的时候,就会打开失败r+:以读写的方式打开,当文件不存在的时候,就会打开失败w:以只写方式打开,如果文件不存在,则创建文件。文件存在,则会截断(清空)文件w+:以读写的方式打开,如果文件不存在,则创建文件,如果文件存在,则会截断(清空)文件a:以追加方式打开,只支持写,如果文件不存在,原创 2020-10-25 23:41:48 · 161 阅读 · 0 评论 -
【C++】类和对象详解
文章目录1、面向过程和面向对象的区别1.1 面向过程1.2 面向对象2、封装3、类的实例化3.1 空类的大小为什么是一个字节?4、this指针4.1 this指针的特性5、类六大默认函数6、再谈构造函数6.1 注意6.2 explicit关键字7、static成员7.1 概念7.2 特性7.1 [面试题中常见的C++常用关键字](https://blog.csdn.net/weixin_43967449/article/details/116330632?spm=1001.2014.3001.5501)8、原创 2020-10-24 00:05:00 · 388 阅读 · 0 评论 -
【C++】本地提交文件到github,文件出现红色感叹号怎么处理
1.在空白处右击,然后点击“Git Bash Here”,出现黑框 2.在黑框输入“git commit -m +提交信息”(提交信息可修改) 3.输入“git push” 4.关于github的其他操作怎么将github上代码clone到本地本地代码提交到github远程仓库...原创 2020-10-15 11:37:42 · 1349 阅读 · 0 评论 -
【C++】怎么将github上代码clone到本地
文章目录1.复制红色框里面的东西2.右键“Git Bash Here”,在黑框中输入“git clone +(刚才复制的东西)”,然后回车3.git用到的工具包1.复制红色框里面的东西2.右键“Git Bash Here”,在黑框中输入“git clone +(刚才复制的东西)”,然后回车3.git用到的工具包TortoiseGit-2.8.0.0-64bit:https://tortoisegit.org/download/Git-2.22.0-64-bit:https://gitforwi原创 2020-10-11 17:10:16 · 473 阅读 · 0 评论 -
【C++】类的六个默认成员函数
1.空类如果一个类中什么成员都没有,简称为空类。空类并不是什么都没有,而会生成6个默认成员函数 析构函数完成初始化和清理工作 拷贝构造是使用同类对象对象初始化构建对象 赋值重载把一个对象赋值给另一个对象 取地址重载:普通对象和const对象取地址 2.构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。构造函数并不是开辟空间创建对象,而是初始化对象。// 构造函数原创 2020-10-11 16:51:49 · 192 阅读 · 0 评论 -
【C++】C++缺省参数、内联函数、auto关键字理解
1.缺省参数的概念声明或定义函数时,给函数一个默认值。void Test(int a = 0){ cout << a << endl;}int main(){ Test(); // 没哟传参时,使用参数的默认值 Test(10); // 传参时,使用指定的实参 return 0;}2.缺省参数的分类①全缺省参数void TestFunc(int a = 10, int b = 20, int c = 30){ cout << a &原创 2020-09-23 22:08:09 · 158 阅读 · 0 评论 -
【C++】C++函数重载理解
1.重载概念C++ 允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或顺序)必须不同int Add(int left, int right){ return left + right;}double Add(double left, double right){ return left + right;}long Add(long left, long right){ return left + right;}int main(){原创 2020-09-22 22:23:32 · 88 阅读 · 0 评论 -
【C++】C++引用的理解
1.引用的概念是给变量起了一个别名,编译器不会为引用重新开辟空间,引用和引用的实体占用同一个空间。2.引用的定义void TestRef(){ int a = 10; int& ra = a; // 变量a的引用 printf("%p\n", &a); printf("%p\n", &ra);}// 引用类型和引用的实体类型必须是同一类型3.引用的特性①引用在定义时必须初始化②一个变量可以有多个引用③引用一个实体,就不能引用另一个实体voi原创 2020-09-21 23:24:01 · 171 阅读 · 0 评论 -
C++入门基本操作①(关键字,命名空间,输入输出)
一.c++关键字C++总计63个关键字,C语言32个关键字autoauto(自动,automatic)是存储类型标识符boolbool(布尔)其值可选为 true(真)或者 false(假)breakbreak(中断、跳出)case用于 switch 语句中,用于判断不同的条件类型。charchar(字符,character)6.classclass(类)使用 class 关键字声明一个类。constconst double pi(3.14159)原创 2020-09-16 22:18:59 · 280 阅读 · 0 评论