C++从初阶到进阶
文章平均质量分 90
C++笔记
_End丶断弦
长风破浪会有时,直挂云帆济沧海!
展开
-
哈希表、哈希桶(C++实现)
哈希表、哈希桶哈希概念哈希函数哈希冲突解决哈希冲突闭散列线性探测闭散列的实现哈希表的结构哈希表的插入哈希表的查找哈希表的删除开散列哈希概念哈希概念在顺序结构和平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,O(logN ),搜索的效率取决于搜索过程中元素的比较次数。而理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存原创 2022-01-26 15:21:47 · 3535 阅读 · 63 评论 -
红黑树(C++实现)
红黑树红黑树的概念红黑树的性质红黑树的结点定义红黑树的插入情况一情况二情况三红黑树的查找红黑树的验证红黑树的和AVL树的比较红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是红色或黑色。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。如下图:红黑树的性质每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简原创 2022-01-16 21:58:41 · 4896 阅读 · 58 评论 -
异常(C++)
异常概念异常的抛出和捕获异常的重新抛出自定义异常体系C++标准库的异常体系异常的优缺点原创 2022-04-11 15:48:32 · 1544 阅读 · 56 评论 -
特殊类设计
特殊类设计设计一个类,不能被拷贝请设计一个类,只能在堆上创建对象请设计一个类,只能在栈上创建对象请设计一个类,不能被继承请设计一个类,只能创建一个对象(单例模式)设计一个类,不能被拷贝拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。class CopyBan{public: CopyBan(int a = 1) :_a(a) {}private: CopyBan(const CopyBan&.原创 2022-04-08 16:23:21 · 187 阅读 · 41 评论 -
C++11-lambda表达式
lambda表达式可变模板参数一级目录二级目录三级目录可变模板参数C++11中新增加了可变模板参数,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。掌握可变模板参数的基本使用即可。可变模板参数的定义:一级目录二级目录三级目录...原创 2022-02-24 20:13:10 · 844 阅读 · 33 评论 -
C++11-你不知道的(上)
C++11上列表初始化变量类型推导decltype类型推导(知道即可)新增加的容器默认成员函数控制显式缺省函数删除默认函数右值引用左值引用和右值引用左值引用和右值引用比较右值引用使用的场景1右值引用使用的场景2完美转发列表初始化在C++98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。比如:int a[] = { 1,2,3 };对于一些自定义的类型,却无法使用这样的初始化。比如:vector<int> v{1,2,3,4,5};就无法通过编译,导致每次定义vec原创 2022-02-22 14:48:02 · 497 阅读 · 19 评论 -
布隆过滤器——(C++)
布隆过滤器布隆过滤器的提出布隆过滤器概念哈希函数和布隆过滤器的长度位图的代码实现布隆过滤器Set接口Test接口布隆过滤器的删除布隆过滤器的优点布隆过滤器的缺点哈希分割布隆过滤器的提出我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的? 用服务器记录了用户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那些已经存在的记录。 如何快速查找呢?用哈希表存储用户记录,缺点:浪原创 2022-02-11 18:42:05 · 3910 阅读 · 28 评论 -
位图的介绍、使用和模拟实现
位图的介绍和模拟实现位图的介绍位图的应用位图使用位图的定义位图的成员函数位图运算符的使用位图的模拟实现构造函数set、reset、filpsize、count位图的介绍经典面试题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。常用方法有:1.先排序,在利用二分查找2.将数据放到unorder_set中,利用find进行查找,判断是否在这些数中方法1的时间复杂度:排序O(NlogN),二分查找O(logN)方法2的时间复杂度:O(N)这原创 2022-02-07 21:49:12 · 1167 阅读 · 13 评论 -
用一棵红黑树同时封装出set和map
一棵红黑树同时封装set和map红黑树代码红黑树的模板参数红黑树结点的数据存储仿函数的增加正向迭代器的实现operator++operator--封装后的set和mapset的代码map的代码测试set和map的迭代器????快速导航和本篇相关的文章????set和map的基本使用点击直达文章红黑树点击直达文章红黑树代码我们要对KV模型的红黑树进行封装,模拟实现set和map,用到的代码如下#include<iostream>using namespace原创 2022-01-21 18:53:02 · 1301 阅读 · 49 评论 -
STL-unordered_set和unordered_map的基本使用
unordered_set和unordered_map的基本使用unordered_setunordered_set的使用unordered_set的定义方式unordered_set的常用接口unordered_multisetunordered_mapunordered_map的定义方式unordered_map的主要接口使用unordered_multimap????快速导航关联在一起的文章????文章名称链接二叉搜索树点击直达文章set和map的基本使用点击直达文章原创 2022-01-19 21:06:45 · 1227 阅读 · 28 评论 -
室友对我说AVL树插入,旋转的水太深了,你把握不住的。
这里写目录标题一级目录二级目录三级目录一级目录一级目录二级目录三级目录一级目录原创 2022-01-13 18:30:23 · 526 阅读 · 31 评论 -
一篇带你了解STL-set和map的基本使用
set和map关联式容器键值对树形结构的关联式容器setset的构造set的插入和迭代器set的容量set的删除multisetmap二级标题二级标题二级标题二级标题三级目录关联式容器之前遇到的vector,list,deque这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器:用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。键值对用来表示具有一一对应关系的一种结原创 2022-01-09 21:30:00 · 964 阅读 · 39 评论 -
二叉搜索树
二叉搜索树二叉搜索树概念二级目录三级目录一级目录二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树例如:二级目录三级目录一级目录...原创 2022-01-01 20:01:03 · 980 阅读 · 45 评论 -
C++之多态
C++多态多态多态的概念多态的实现和实现虚函数虚函数的重写虚函数的重写的2个例外协变析构函数的重写C++11 override 和 final重载、覆盖(重写)、隐藏(重定义)的对比(重点)抽象类接口继承和实现继承多态的原理虚函数表原理多态多态多态的概念多态就是就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态多态的实现和实现不同功能的函数用同一个函数名可以调用不同的内容的函数在继承中的2个必要的条件:1.必须通过基类的指针或引用调用虚函数2.被调用的函数必须是原创 2021-12-11 13:25:33 · 1025 阅读 · 14 评论 -
C++之继承
C++继承继承继承的概念继承的定义继承关系和访限定符继承方式一级目录一级目录继承继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承的定义上面的基类也可以叫父类,派生类也可以叫子类。继承关系和访限定符继承方式接下来用代码测试上面的继承方式class Person{public: void Print() { cout <原创 2021-12-05 13:15:51 · 1337 阅读 · 27 评论 -
stl——容器适配器
stl-容器适配器????适配器????stack容器适配器✒️stack的介绍✏️stack的使用✏️stack的模拟实现????????适配器????适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。例如:容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。也就是对一种容器封装来实现其他的容器。知道了容器适配器接下来先来讲stack。????stack容器适配器✒️st原创 2021-11-24 14:55:07 · 2425 阅读 · 26 评论 -
C++模拟实现vector
✏️vector的模拟实现✏️????初始结构????构造函数????拷贝构造????赋值????容量有关的操作✨reserve✨resize????size????capacity????迭代器????增删查改✨push_back✨pop_back✨operator[]✨迭代器失效问题✨insert✨erase????reserve的memcpy浅拷贝问题????初始结构_start:指向首元素_finsh:指向最后元素的下一个位置_endofstorage:空间最后一个的下一个位置names原创 2021-11-21 08:25:30 · 1092 阅读 · 17 评论 -
C++初识vector
这里写目录标题????三级目录????##????三级目录原创 2021-11-19 14:26:19 · 2108 阅读 · 12 评论 -
C++string的模拟实现
string的模拟实现1.深浅拷贝1.1浅拷贝1.2深拷贝1.3深拷贝的现代写法2.opertor=2.1赋值的现代写法一级目录一级目录1.深浅拷贝1.1浅拷贝namespace gpy{class string{public: //构造函数 string(char* str) :_str(new char[strlen(str) + 1]) { strcpy(_str, str); } //析构函数 ~string() { delete[] _str;原创 2021-11-15 10:36:25 · 890 阅读 · 3 评论 -
C++类和对象中(2)
C++类和对象中Ⅱ1.赋值运算符重载1.1运算符重载2.const成员3.取地址及const取地址操作符重载1.赋值运算符重载1.1运算符重载C ++ 中预定义的运算符的操作对象只能是内置类型。但实际上,对于许多用户自定义类,也需要类似的运算操作,所以就出现了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字operator后面接需要重载的运算符符号。函数原型:返回值类型 operator操作符(参数列原创 2021-11-01 14:36:23 · 363 阅读 · 8 评论 -
C++初识string(一)
C++初识string1.string类(了解)2.string类的常用接口2.1string类对象的常见构造三级目录2.2string类对象的容量操作2.3string类对象的访问及遍历操作2.4string类对象的修改操作1.string类(了解)字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型strin原创 2021-11-01 10:05:24 · 752 阅读 · 3 评论 -
C++模板初阶
C++模板初阶1.泛型编程2.函数模板2.1函数模板的概念2.2函数模板的形式2.3函数模板的原理2.4函数模板的实例化2.5模板参数的匹配原则3.类模板3.1类模板的形式3.2类模板的实例化1.泛型编程例如:如何实现通用的交换2个数的函数?void Swap(int x, int y){ int tmp = x; x = y; y = tmp;}void Swap(double x, double y){ int tmp = x; x = y; y = tmp;}使用函数重原创 2021-10-27 15:49:07 · 117 阅读 · 6 评论 -
C++类和对象(中)
C++类和对象中1. 类的6个默认成员函数2. 构造函数2.1构造函数的概念2.2构造函数的特性2.3需要注意的细节3. 析构函数3.1析构函数的特性4.拷贝构造函数4.1拷贝构造函数的特性4.1拷贝构造函数需要注意的1. 类的6个默认成员函数class Time{};我们给一个空类,里面声明都没有吗?并不是的,并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。2. 构造函数2.1构造函数的概念概念:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编原创 2021-10-24 21:03:18 · 169 阅读 · 6 评论 -
C++类和对象(上)
C++类和对象上1.面向过程和面向对象的初步认识2.类的定义3.类的访问限定符、封装、作用域4.类的实例化5.类对象模型6.this指针(重点)this指针的特性1.面向过程和面向对象的初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题,C++是面向对象的,例如人们在设计汽车的时候,并不是先设计和制造发动机,在设计地盘等,而是分别设计和制造发动机、地盘等,最后在组装。驾驶员踩油门控制油路,控制发动机,汽车行驶。这就是面向对象。2.类的定义类的实质是一种引用数据类原创 2021-10-22 21:43:52 · 122 阅读 · 8 评论 -
C++从入门到入土(下)
C++从入门到入土下1.extern “C”2.引用2.1引用及引用的特性2.2常引用引用1.extern “C”有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern “C”,意思是告诉编译器,将该函数按照C语言规则来编译。比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree两个接口来使用,但如果是C项目就没办法使用,那么他就使用extern “C”来解决那就要在函数名前加上“extern C”,告诉编译器按照C语言来编译就不原创 2021-10-20 17:09:56 · 848 阅读 · 2 评论 -
C++从入门到入土(上)
C++入门上篇1.C++关键字2.命名空间3.命名空间的使用4.C++输入&输出5.缺省参数6.函数的重载1.C++关键字C语言有32个关键字,C++共有63个 关键字。(先了解,后面遇到一个学一个)2.命名空间hello world:那这里的using namespace std是什么呢?这就namespace关键字。在C语言中:比如:我们需要定义一个strlen的变量此时是没问题的,但包上头文件 #include<string.h>编译器就会报错。这就是我们跟库里面原创 2021-09-27 17:09:53 · 282 阅读 · 3 评论