
c++
文章平均质量分 78
码农吃枇杷
这个作者很懒,什么都没留下…
展开
-
c++类型转换
RTTI:Run-time Type identification的简称,即:运行时类型识别。的地址一样,但是值却不一样,因为编译器优化,将。,访问了非法的内存,有可能会出错,这是不安全的。对象已经访问并修改了不属于他的成员。的话,虽然可能不会报错,但是。C风格的转换虽然简单,但是。如果使用强制类型转换或者。在vs2022下,虽然。想要让a是3,可以加上。看成了常量,后面用到。的位置相当于直接替换。,相比于强转是安全的。原创 2024-10-09 21:07:44 · 654 阅读 · 0 评论 -
C++智能指针
内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。原创 2024-10-09 13:11:06 · 444 阅读 · 0 评论 -
C++ 异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。原创 2024-10-02 23:53:29 · 975 阅读 · 0 评论 -
C++ 11
左值是一个表示数据的表达式(如变量名或解引用的指针),原创 2024-09-25 11:52:43 · 1083 阅读 · 0 评论 -
布隆过滤器
在上图中,如果想要精确的结果,可以在判断"该昵称被别人注册的时候",这时去服务器中进行查询(由于布隆过滤器判断 在 是不准确的),来得到准确的结果。近似算法可以使用布隆过滤器,精确算法可以先使用哈希切割,再将Ai和Bi插入到setA和setB中,这样就可以快速且准确的找交集。如果是情况1,文件很大有很多重复,后面重复插入都失败,可以插入到set中。如果是情况2,不断插入set以后,内存不足,会抛异常,需要换一个哈希函数进行二次切分,再找交集。哈希切割,如果需要统计ip的topK问题,可以使用优先级队列。原创 2024-09-12 20:11:02 · 746 阅读 · 0 评论 -
哈希表的封装和位图
数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。也是一样,两个位图,00表示出现0次,01表示出现1次,10表示出现2次,11表示出现3次及以上。使用两个bitset,00表示出现0次,01表示出现1次,10表示出现2次或者2次以上。与上面类似:将这些整数各自映射到一个位图,一个值在两个位图都存在,则是交集。可以计算一下,40亿个数,需要开2^32bit,即512MB。原创 2024-09-08 19:07:39 · 1049 阅读 · 0 评论 -
map和set的封装
至于为什么可以这样做,可以看pair的构造函数的[官方文档](中返回的iterator转化为const_iterator。先修改RBTree.h的insert函数。加上const_iterator。中的insert函数的返回值。原创 2024-09-03 19:27:40 · 353 阅读 · 0 评论 -
c++哈希表
通过哈希函数获取待插入元素在哈希表中的位置如果该位置中没有元素则直接插入新元素,如果该位置中有元素发生哈希冲突,使用线性探测找到下一个空位置,插入新元素。上面写的扩容效率太低,每次都需要调用析构函数释放之前链表的节点,很麻烦,所以可以让之前链表的节点“挪动”下来、当key为string时,取模就会有问题,此时需要将字符串映射为某一个数字。线性探测:从发生冲突的位置开始,依次向后探测,直到寻找到下一个空位置为止。但是这样传string就要多传一个参数,很烦,所以可以使用类模版的全特化。原创 2024-09-03 16:51:01 · 593 阅读 · 0 评论 -
红黑树的插入
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树。解答: 根据性质3和性质4可知, 如果有一颗红黑树, 那么它的最短路径应是全黑节点, 最长路径应是一红一黑节点交替。问题: 为什么满足上面的性质,红黑树就能保证:其最长路径中节点个数不会超过最短路径节点个数的两倍?规定cur为当前节点,p为父节点,g为祖父节点,u为叔叔节点。情况2:cur为红,p为红,g为黑,情况3:cur为红,p为红,g为黑,原创 2024-08-12 13:06:30 · 360 阅读 · 0 评论 -
avl树的部分实现
如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有n个结点,其高度可保持在。即,先对30进行左单旋,然后再对90进行右单旋,旋转完成后再考虑平衡因子的更新。新增节点在右子树,父亲bf++新增节点在左子树,父亲bf–关于旋转的代码,分几种情况。原创 2024-07-25 12:54:24 · 639 阅读 · 0 评论 -
map的operator[]
有个面试题:当key不在map中时,通过operator[]获取对应value时会发生什么问题?要想理解上面的实现,我们先看一下insert的[文档]([官方文档]([map::operator。假设现在有一个统计次数的要求。原创 2024-07-25 12:48:08 · 342 阅读 · 0 评论 -
c++继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用public:protected:// 公有继承protected:int _stuid;// 学号protected:int _jobid;// 工号int main()原创 2024-04-25 18:40:58 · 1021 阅读 · 0 评论 -
c++多态
public:cout原创 2024-05-07 19:25:22 · 684 阅读 · 0 评论 -
搜索二叉树
但是InOrder()需要一个参数root,现在有三种解决办法,a.将_root改为public,b.写一个GetRoot(),c.如下。此时有两种解决办法,一是更新_root,更新为节点3,二是找左子树的最大值来作为cur的prev。我们知道,搜索二叉树的中序遍历是一个有序表,现在我们想要像这样调用。看似上面的代码没有问题,但面对下面的测试用例时,就会有问题。这个引用起作用,就需要一层一层的往下递归传递。, 这样是错误的,因为函数的默认参数。其中第②种情况包含第①中情况。,可以看下面的递归展开图。原创 2024-05-22 15:24:05 · 426 阅读 · 0 评论 -
c++模版进阶
/ add.hpp地址,因为add没有实例化,没办法确定T// add.hpp。原创 2024-04-15 20:34:26 · 960 阅读 · 0 评论 -
反向迭代器
为例,我们完全可以再添加一个__list_reverse_iterator结构体,只需要修改++和–的逻辑。但是这样代码重复度太高了!而且自定义类型的迭代器才可以这样用,所以SGI版本的STL使用了迭代器适配模式。创立一个reverse_iterator.h,弱化了源码的萃取版本。单独写一个迭代器的类不仅减少了代码的冗余,其他容器也可以很好的适用。原创 2024-03-03 21:31:28 · 336 阅读 · 0 评论 -
stack和queue
是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。原创 2024-03-03 21:29:56 · 842 阅读 · 0 评论 -
stl_list
迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。原创 2024-01-31 20:56:35 · 378 阅读 · 1 评论 -
c++类和对象
在Person.h中有如下代码int age;// 定义public:// 声明private:int _age;// 声明Person.cppmain.cppint main()Person p1;return 0;此时运行代码会出现链接错误(fatal error LNK1169: 找到一个或多个多重定义的符号),因为age会在person.cpp和main.cpp展开,都会放到符号表,链接时就会有两个age,所以.h文件中要谨慎地定义全局变量。原创 2023-09-14 17:49:16 · 94 阅读 · 7 评论 -
c++类和对象第二部分
public:static StackOnly CreatObj() // 提供一个静态成员函数供外界使用return s;StackOnly(int a = 0) : _a(a){} // 将构造函数私有化int main()return 0;public:static StackOnly CreatObj() // 提供一个静态成员函数供外界使用return s;原创 2023-10-08 16:18:28 · 79 阅读 · 5 评论 -
vector
insert,erase pos位置后,不要再次访问pos,可能会出现各种出乎意料的结果,这就是迭代器失效。原创 2024-01-26 16:50:09 · 421 阅读 · 3 评论 -
cc++内存管理
选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)globalVar在哪里?C localVar在哪里?AstaticGlobalVar在哪里?C staticVar在哪里?Cnum1 在哪里?Achar2在哪里?A *char2在哪里?ApChar3在哪里?A *pChar3在哪里?Dptr1在哪里?A *ptr1在哪里?B。原创 2023-10-14 20:23:23 · 50 阅读 · 1 评论 -
c++ string(包含string的部分实现)
at越界后会抛异常,[]越界后会直接报错。原创 2023-11-10 20:26:37 · 200 阅读 · 1 评论 -
模版_函数模版与类模版_使用类模板写一个通用栈
函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。原创 2023-10-19 15:46:37 · 71 阅读 · 1 评论