自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 【C++ OJ练习】9.最小栈

利用两个栈实现

2023-07-26 09:00:00 122

原创 【C++ OJ练习】8.字符串相乘

两个数的乘积长度为两个数的长度之和或者长度之和减一 相乘进位。

2023-07-21 09:00:00 88

原创 【C++ OJ练习】7.字符串相加

拿到每个字符后 减去字符0 转化成对应的数字 再相加即可 倒着加 因为有进位的情况 最后头插或。

2023-07-12 09:00:00 130

原创 【C++ OJ练习】6.验证回文串

字符的话 说明不是回文串 就这样一直往下走 直到最后两下标相遇 那么就是回文串 注意双循环条件。字母全部要变成小写 并且不能管空格和标点 这样从前和后分别遍历并进行比较 如果遇到不是相同。

2023-07-11 09:00:00 196

原创 【C++ OJ练习】5.字符串最后一个单词的长度

倒着找第一个空格的下标 用下标之间的差来计算。

2023-07-10 09:00:00 149

原创 【C++ OJ练习】4.字符串中的第一个唯一字符

利用计数排序的思想 映射进行计数 最后计数为1的那个字符就是唯一字符 从前往后遍历 可以得到。

2023-07-09 09:00:00 100

原创 【C++ OJ练习】3.反转字母

前后分别给两个指针 进行遍历 找到字母后就交换 然后往下走 没找到就直接往下走 注意双循环条件。

2023-07-08 09:00:00 110

原创 【C++ OJ练习】2.计算日期到天数转换

先把前n-1个月的天数加起来 再加最后一天的天数 注意闰年情况。

2023-07-07 09:00:00 107

原创 【C++ OJ练习】1.求和

利用C++构造函数的特性 既然不能使用循环 那么我们可以定义n个对象 就会调用n次构造函数。去代替循环 每次调用的时候进行加法的计算。

2023-07-06 09:00:00 210

原创 【C++】23.C++的IO流(补)

C++标准库提供了4个全局流对象cin、cout、cerr、clog,使用cout进行标准输出,即数据从内存流向控制台(显示器)。使用cin进行标准输入即数据通过键盘输入到程序中,同时C++标准库还提供了cerr用来进行标准错误的输出,以及clog进行日志的输出,cout、cerr、clog是ostream类的三个不同的对象,因此这三个对象现在基本没有区别,只是应用场景不同。在使用时候必须要包含文件并引入std标准命名空间。

2023-05-29 09:00:00 815

原创 【C++】22.单例模式+类型转换

总结对比一下饿汉和懒汉的区别懒汉模式需要考虑线程安全和释放的问题 实现相对复杂 饿汉模式不存在以上问题 实现简单懒汉是一种懒加载模式 需要时再初始化对象 不会影响程序的启动 饿汉模式则相反 程序启动阶段就创建初始化实例对象 会导致程序启动慢 影响体验如果有多个单例类 假设有依赖关系(B依赖A) 要求A单例先创建初始化 B再启动 那么就不能用饿汉 因为无法保证初始化顺序 这个用懒汉我们就可以手动控制总结一下:实际中懒汉模式还是更实用一些。

2023-05-19 09:00:00 301

原创 【C++】21.智能指针

借此,我们实际上把管理一份资源的责任托管给了一个对象。

2023-05-18 09:00:00 537

原创 【C++】20.异常

传统的处理错误的缺陷:a.拿到错误码 需要查找错误码表 才知道是什么错误b.如果一个函数使用过返回值拿数据 发生错误时很难处理c.如果调用的函数栈很深 一层层返回错误码 整个处理很难受。

2023-05-16 09:00:00 216

原创 【C++】19.C++11

右值引用作参数和作返回值减少拷贝的本质是移动构造和移动赋值左值引用和右值引用本质的作用都是减少拷贝右值引用本质可以认为是弥补左值引用不足的地方相辅相成 都是减少拷贝左值引用:解决的时传参过程中和返回值过程中的拷贝作参数:void f1(T x) -> void f1(T& x) 解决的是传参过程中减少拷贝作返回值:T f2() -> T& f2() 解决的返回值过程中的拷贝 但是无法解决接收返回值时的拷贝 比如T ret = f2();但是要注意这里有限制。

2023-05-15 09:00:00 639

原创 【C++】18.哈希

哈希(散列):将存储的数据根存储的位置使用哈希函数建立出映射关系 方便我们进行高效查找哈希冲突:不同的值映射到了相同的位置解决哈希冲突:1.闭散列-开放定制法(我的位置被占了 我就去占别的位置--不推荐)2.开散列-拉链法(冲突的数据链式结构挂起来--推荐)查找的时间复杂度O(1)假设总是有一些桶挂的数据很多 冲突很厉害如何解决?1°一个链的长度超过一定值 就将挂链表改成挂红黑树(Java HashMap就是这样解决的 当桶长度超过8就改成挂红黑树)2°控制负载因子。

2023-04-28 09:00:00 471

原创 【C++】17.map和set的模拟实现

operator++是关键 迭代需要走中序 如何走中序?_node从左子树的最左结点开始遍历走中序分两类情况:如果右树不为空 那么中序的下一个就是右子树的最左结点如果右树为空 那么表示_node所在的子树已经完成 在一个结点的祖先去找沿着路径往上孩子是它的左的那个祖先整颗红黑树。

2023-04-15 09:00:00 395

原创 【C++】16.红黑树

红黑树,是一种,但在,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

2023-04-13 09:00:00 382

原创 【C++】15.AVL树

还会涉及到parent上面的祖先需不需要变化 我们一步步来。第一步已经在上篇博客实现 难度在第二步。非常复杂 需要进行旋转。

2023-04-03 09:00:00 224

原创 【C++】14.二叉搜索树

有两种情况:一棵空树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树。

2023-03-31 09:00:00 125

原创 【C++】13.多态

必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写重载:1.两个函数在同一作用域2.函数名相同 参数不同重写:1.两个函数分别在父类和子类的作用域2.函数名/参数/返回值都必须相同(协变例外)3.两个函数都必须是虚函数重定义(隐藏)1.两个函数分别在父类和子类的作用域2.函数名相同3.两个父类和子类的同名函数不构成重写就是重定义。

2023-03-18 09:00:00 266

原创 【C++】12.继承

class Student(派生类):public(继承方式) Person(基类){};多继承是C++的缺陷之一,Java设计的时候避开了多继承继承与组合//继承class A{};{};//组合class C{};class DC c;继承是一种白箱(看得见)复用 父类对子类基本是透明的 但是一定程度破坏了父类的封装组合是一种黑箱(看不见)复用 C对D是不透明的 C保持着封装对比认为组合是更好的组合的类耦合度更低继承的类是一种高耦合面试:用组合还是继承?

2023-03-17 09:00:00 344

原创 【C++】11.模板进阶

模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2023-03-16 09:00:00 325

原创 【C++】10.stack和queue

容器:string/vector/list/deque(序列式容器)适配器:stack/queue/priority_queue迭代器:iterator/const_iterator/reverse_iterator/const_reverse_iterator算法:sort/find/reverse仿函数:less/greaterdeque的缺点:大量的频繁opeartor[]的效率低迭代器的遍历相对复杂 效率也有一些影响vector缺点:头插头删的效率低 空间不够用了增容代价大。

2023-03-15 09:00:00 281

原创 【C++】9.list

vector:顺序表list:链表为什么会有list?补充vector的缺点存在的vector缺点:1.头部和中部的插入删除效率低 O(N) 因为需要挪动数据2.插入数据空间不够需要增容 增容需要开新空间 拷贝数据 释放旧空间 会付出很大代价优点:1.支持下标的随机访问 间接的就很好的支持排序 二分查找 堆算法list就是为了解决vector的缺陷优点:1.list头部 中间插入不再需要挪动数据 效率高 O(1)2.list插入数据是新增节点 不需要增容缺点:1.不支持随机访问。

2023-03-14 09:00:00 208

原创 【C++】8.vector

第二种:直接进行交换 包含三个指针的交换 写一个命名空间的swap 利用std的swap进行。需要加返回值 不加就有可能跳过偶数 加了就可以从删的下一个开始遍历 不会有漏数据的。不然删除的时候 可能会漏掉数据 因为返回的下一个位置不会被再次检测 写了返回类。拷贝的 一个一个字节进行拷贝 浅拷贝 所以要用for循环进行一个个的拷贝。因为迭代器it没有动 还是在旧空间 所以无法进行迭代器的遍历。步骤:开新空间 拷贝数据 释放旧空间 然后指针指向新空间。第一种:释放旧空间 开新空间 memcpy拷贝数据。

2023-03-13 09:00:00 180

原创 【C++】7.string

如果从w位置开始删 erase(,2) erase(,5) erase(,8) erase(,string::npos)"hello\0" resize(8) 后面三个添字符 resize(18) 需要先扩容 resize(2) 删。因此要强转 利用strncpy进行直接的追加 可以直接把\0拷贝过来 STL库里面是返回*this的。注意字符串的插入时的一些细节 pos为0的时候 end会转换 -1的无符号变为最大数。编译器默认的拷贝构造是浅拷贝 也就是说两个hello的地址是一样的。

2023-03-10 09:00:00 317

原创 【C++】6.模板初阶

交换两个数 任何一个类型交换还要重新写一个函数 如何解决?模板->写跟类型无关的函数。

2023-02-28 09:00:00 312

原创 【C++】5.C/C++内存管理

new的原理调用operator new函数申请空间在申请的空间上执行构造函数,完成对象的构造delete的原理在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间new T[N]的原理调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请在申请的空间上执行N次构造函数delete[]的原理在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理。

2023-02-26 09:00:00 437

原创 【C++】4.类和对象(下)

构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因。

2023-02-24 09:00:00 390

原创 【C++】3.类和对象(中)

调用默认构造函数:1.无参 2.全缺省 3.编译器自动生成的特点:不用传参 三个只能有一个无参初始化和全缺省不能同时存在 调用时会有歧义无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数。成员变量的命名风格 有_ 初始化时year = year就很傻 需要区分我们会自己实现构造函数 那么编译器的构造函数是不是没有用?有用 存在即合理。

2023-02-23 09:00:00 324

原创 【C++】2.类和对象(上)

int _age;{}class为定义类的关键字Person为类的名字{}为类的主体最后要有分号类中的元素称为类的成员类中的数据称为类的属性或者成员变量类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。声明放在.h文件中,类的定义放在.cpp文件中第二种方式引入.h文件后可以写相关成员函数 加上类名:: 表示是这个类中的函数。

2023-02-21 09:00:00 357

原创 【C++】1.C++基础

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。普通的命名空间int a;命名空间可以嵌套int a;int b;int c;int d;同一个工程中允许存在多个相同名称的命名空间编译器最后会合成同一个命名空间中(可以写两个N1)C++11:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。使用auto定义变量时必须对其进行初始化。

2023-02-20 09:00:00 414

原创 #8排序算法#

插入 希尔 堆 选择 冒泡 快速 归并 计数排序大集合

2023-02-16 09:00:00 141

原创 #24二叉树遍历#

#24二叉树遍历#

2023-02-15 09:00:00 38

原创 #23平衡二叉树#

#23平衡二叉树#

2023-02-14 09:00:00 34

原创 #22二叉树的最大深度#

#22二叉树的最大深度#

2023-02-13 09:00:00 37

原创 #21二叉树的前序遍历#

#21二叉树的前序遍历#

2023-02-12 09:00:00 29

原创 #19用栈实现队列#

【代码】#19用栈实现队列#

2023-02-11 09:00:00 25

原创 #18用队列实现栈#

【代码】#18用队列实现栈#

2023-02-10 09:00:00 33

原创 #17有效的括号#

【代码】#17有效的括号#

2023-02-09 09:00:00 60

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除