![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 94
ymz123_
C/C++
展开
-
C++智能指针
文章目录智能指针的使用及原理RAII智能指针的原理std::auto_ptr智能指针的使用及原理为什么需要智能指针?以malloc和free为例:malloc出来的空间,没有进行释放,存在内存泄漏的问题。异常安全问题。如果在malloc和free之间如果存在抛异常,那么还是有内存泄漏。这种问题就叫异常安全。RAIIRAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技原创 2022-11-11 00:37:55 · 603 阅读 · 0 评论 -
C++实现LRU
LRU原创 2022-09-13 00:02:59 · 196 阅读 · 1 评论 -
C++实现高并发内存池
文章目录完整代码项目介绍内存池开胃菜--先设计一个定长的内存池高并发内存池整体框架设计thread cachecentral cachepage cache回收、释放tcmalloc源码中实现基数树进行优化完整代码代码链接项目介绍当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free)。这个项原创 2022-03-21 01:14:03 · 2744 阅读 · 3 评论 -
单例模式(C++)
文章目录不能被拷贝的类只能在堆上创建对象的类只能在栈上创建对象的类不能被继承的类只能创建一个对象的类(单例模式)单例模式饿汉模式懒汉模式不能被拷贝的类拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。C++98将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即可。class CopyBan{ //...private: CopyBan(const CopyBan&);原创 2022-03-14 16:55:52 · 199 阅读 · 10 评论 -
哈希(C++)
文章目录unordered系列关联式容器unordered_mapunordered_set底层结构哈希概念哈希冲突哈希函数(常见)哈希冲突解决闭散列开散列(哈希桶)unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的原创 2022-03-07 21:49:27 · 839 阅读 · 23 评论 -
红黑树(C++)
文章目录红黑树红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入操作情况一情况二情况三红黑树的验证用红黑树封装map、set红黑树的迭代器封装map封装set红黑树红黑树的概念红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(),红黑树不追求绝对平衡,原创 2022-02-27 23:33:59 · 3815 阅读 · 34 评论 -
set、map及AVL树
文章目录关联式容器树型结构的关联式容器键值对setmapinsertoperator[]multisetmultimap前K个高频单词AVL树概念节点的定义插入旋转右单旋左单旋左右双旋右左双旋AVL树的验证关联式容器序列式容器如vector、list、deque、forward_list(C++11)等,其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器:里面存储的是<key, value>结构的键值对,再数据检索时比序列式容器效率更高。树型结构的关联式容器根据应用场景的不原创 2022-02-23 23:45:40 · 710 阅读 · 13 评论 -
二叉搜索树(C++)
文章目录二叉搜索树概念与操作二叉搜索树的概念二叉搜索树的操作查找插入删除二叉搜索树的应用二叉树的性能分析二叉搜索树概念与操作二叉搜索树的概念二叉搜索树又称二叉排序树,若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都大于根节点的值,它的左右子树也分别未二叉搜索树。也可以是一颗空树。int a[] = { 5, 3, 4, 1, 7, 8, 2, 6, 0, 9 };二叉搜索树的操作查找迭代: Node* Find(const K&am原创 2022-01-27 20:57:20 · 2537 阅读 · 22 评论 -
C++ 多态
文章目录多态的定义及实现多态的构成条件虚函数重写C++11的override和final抽象类多态的原理虚函数表动态绑定与静态绑定单继承和多继承关系的虚函数表单继承中的虚函数表多继承中的虚函数表常见问题多态的定义及实现多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如S原创 2022-01-25 19:01:15 · 1349 阅读 · 17 评论 -
C++ 继承
文章目录继承的概念及定义继承的概念及定义原创 2022-01-23 00:27:09 · 247 阅读 · 17 评论 -
动态规划问题
文章目录Fibonacci字符串分割(Word Break)三角矩阵(Triangle)路径总数(Unique Paths)最小路径和(Minimum Path Sum)Fibonacci题目描述:大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。解题思路:1.递归2.动态规划状态:F(n)状态递推:F(n)=F(n-1)+F(n-2)初始值:F(1)=F(2)=1返回结果:F(N)代码实现:法一:递归(效率低):class Solutio原创 2022-01-05 23:53:20 · 408 阅读 · 0 评论 -
二叉树相关练习(1)
文章目录重建二叉树判断树的子结构二叉树的镜像二叉树的层序遍历二叉树的后序遍历序列二叉树中和为某一值的路径二叉树深度的判定按之字型打印二叉树二叉搜索树中第k小的元素重建二叉树题目描述:给定节点数为 n 二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。解题思路:根据root节点,将中序vector划分成vin_left,vin_right两部分中序子序列原创 2021-12-26 00:47:50 · 413 阅读 · 0 评论 -
C++模板(2)
文章目录非类型模板参数模板的特化函数模板特化类模板特化模板分离编译模板总结非类型模板参数模板参数分为类型形参和非类型形参类型形参:出现在模板参数列表中,跟在class或typename之类的参数类型名称后。非类型形参:用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。C++11提供了一个叫array的容器,和vector相似,但vector插入数据不需要考虑空间大小,不够了就扩容。而array是静态数组,是固定大小的,它用了一个非类型模板参数来控制大小。它没有头插原创 2021-12-01 00:03:32 · 112 阅读 · 0 评论 -
C++ stack和queue
文章目录stack介绍和使用模拟实现stack的使用例题最小栈栈的弹出压入序列逆波兰表达式求值queue模拟实现容器适配器STL标准库中stack和queue的底层结构stack介绍和使用stack文档介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹原创 2021-11-25 18:19:18 · 767 阅读 · 0 评论 -
C++ list
文章目录list的介绍总览list迭代器list的使用及模拟构造、析构函数list iteratorlist capacitylist element accesslist modifiers测试list的介绍list的文档介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向带头链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不原创 2021-11-22 00:05:43 · 936 阅读 · 0 评论 -
C++ vector
文章目录vector的介绍及使用vector的介绍vector的使用:vector的定义vector iterator的使用vector空间增长问题vector增删查改典型例题只出现一次的数字杨辉三角OJvector的介绍及使用vector的介绍vector的文档介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容原创 2021-11-17 16:50:28 · 1215 阅读 · 4 评论 -
C++ string类
文章目录标准库中的string类string类对象的容量操作string类对象的访问及遍历操作string类对象的修改操作string类非成员函数标准库中的string类string类文档链接字符串是表示字符序列的类。标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参basic_string)。string原创 2021-11-14 00:23:33 · 313 阅读 · 0 评论 -
C++模板简介
文章目录泛型编程函数模板概念函数模板的原理函数模板的实例化模板参数的匹配原则类模板类模板的定义格式类模板的实例化泛型编程实现一个交换函数:void Swap(int& left, int& right) { int temp = left; left = right; right = temp; }void Swap(double& left, double& right) { double temp = left; le原创 2021-11-10 14:50:55 · 98 阅读 · 1 评论 -
C/C++内存管理
文章目录C/C++内存分布C语言中动态内存管理方式C++内存管理方式new/delete操作内置类型new和delete操作自定义类型operator new与operator delete函数new和delete的实现原理内置类型自定义类型定位new表达式(placement-new)内存泄漏如何一次在堆上申请4G的内存C/C++内存分布我们先来看下面的一段代码和相关问题int globalVar = 1;static int staticGlobalVar = 1;void Test(){原创 2021-11-09 23:49:53 · 120 阅读 · 2 评论 -
C++类和对象(3)
文章目录再谈构造函数初始化列表explicit关键字static成员再谈构造函数初始化列表class A{public: A(int a = 0) { _a = a; } A& operator=(const A& aa) { if (this != &aa) { _a = aa._a; } return *this; }private: int _a;};class B{public: B(int a, int b原创 2021-11-08 23:48:25 · 107 阅读 · 0 评论 -
C++类和对象(2)
类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。文章目录构造函数概念特性析构函数概念特性拷贝构造函数概念特征构造函数概念对于以下的日期类:class Date{public: void Init(int year, int month, int day) { _year = year; _month = month; _day = day; } void Prin原创 2021-11-06 00:46:46 · 221 阅读 · 0 评论 -
C++类和对象(1)
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。C++不是一个纯面向对象的语言,C++既有面向过程(兼容C),也有面向对象,可以混合编程。C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。struct Student{ void SetStudentInfo(const char* name, const char* gender, int原创 2021-11-05 16:23:50 · 122 阅读 · 0 评论 -
C++入门
文章目录C++关键字命名空间命名空间定义命名空间的使用C++输入&输出缺省参数缺省参数概念缺省参数分类函数重载函数重载概念名字修饰C++关键字C++总计63个关键字,C语言32个关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethr原创 2021-11-04 16:03:57 · 205 阅读 · 0 评论