- 博客(22)
- 收藏
- 关注
原创 C++11
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。
2024-10-29 15:16:05 904
原创 C++ 位图和布隆过滤器
位图结构:无符号整数的范围是:0~2^32-1,所有无符号整数的范围(种类)为42亿9千万(2^32)左右,我们使用位图,位图的每一位对应与一个无符号整数的种类,一共需要2^32bit=0.5GB。将每个比特位扩展为一个小的计数器,当插入元素时,该哈希地址对应的计数器加1,删除的时候减1。假如我们把上面的IP1删除,因为IP2对应的比特位和IP4对应的比特位有相同的,所以当IP1被删除后,IP2也会被认为“删除”。位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。
2024-10-20 14:12:18 821
原创 C++ 哈希表
这是因为在链地址法中,待比较的关键字都是具有相同哈希地址的元素,而在开放地址法中,待比较的关键字不仅包含具有相同哈希地址的元素,而且还包含哈希地址不相同的元素。这样在插入关键字的时候,我们只需要通过哈希函数 Hash(key) 计算出对应的哈希地址 i,然后将其以链表节点的形式插入到以 T[i] 为头节点的单链表中。使用伪随机数序列:假设伪随机数为 9,则得到下一个地址 H(1) = (9 + 5) % 11 = 3,3 对应的地址为空,处理冲突过程结束,记录填入哈希表中序号为 3 的位置。
2024-10-16 00:04:22 942
原创 C++ 红黑树
目录1.红黑树的概念2. 红黑树的特性 3.红黑树的效率4.红黑树节点的定义5.红黑树的插入操作6.红黑树的验证7.红黑树和AVL树的对比 在讲解红黑树性质之前,先简单了解一下几个概念:首先,红黑树是一个二叉搜索树,它在每个节点增加了一个存储位记录节点的颜色,可以是RED,也可以是BLACK;通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的二倍,因而近似平衡(最短路径就是全黑节点,最长路径就是一个红节点一个黑节点,当从根节点到叶子节点的路径上黑色节点相同时,最长路径刚好是最短路
2024-09-24 16:01:18 864
原创 C++ map和set
前面对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现,这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此 map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。注意:multimap和map的唯一不同就是:map中的key是唯一的,而multimap中key是可以 重复的。multiset的使用。
2024-09-11 23:46:28 727
原创 C++ 二叉搜索树(二叉数进阶)
二叉树在前面C数据结构阶段已经讲过,本节取名二叉树进阶是因为:1. map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一种树形结构2. 二叉搜索树的特性了解,有助于更好的理解map和set的特性3. 二叉树中部分面试题稍微有点难度,在前面讲解大家不容易接受,且时间长容易忘。4. 有些OJ题使用C语言方式实现比较麻烦,比如有些地方要返回动态开辟的二维数组,非常麻烦。
2024-09-09 15:41:31 789
原创 C++ 继承
下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。继承关系和访问限定符总结:1.基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。2. 基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。
2024-09-03 23:04:07 1015
原创 STL—容器适配器
容器适配器是一个封装了序列容器的一个类模板,它在一般的序列容器的基础上提供了一些不同的功能。之所以称为容器适配器,是因为它是适配容器来提供其它不一样的功能。通过对应的容器和成员函数来实现我们需要的功能。容器适配器的种类STL 提供了 3 种容器适配器,分别为stack栈适配器、queue 队列适配器以及 priority_queue 优先权队列适配器容器适配器基础容器筛选条件默认使用的基础容器stack。
2024-08-25 00:01:07 1119
原创 STL-list类
list文档介绍1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
2024-08-21 19:49:55 842
原创 STL-string类
标准模板库是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。1.2STL的六大组件1.仿函数 2.空间配置器 3.算法 4.容器 5.迭代器 6.配接器这些再往后的博客中会一一为大家讲解。2.标准库中的string类2.1对string类的讲解string类的文档介绍1.字符串是表示字符序列的类。2.标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作 单字节字符字符串的设计特性。
2024-08-09 14:17:27 606
原创 C++模版初阶
class类模版名类内定义成员public:,size(0){}~vector() 在类外定义private:T* _data;注意:类模板中函数放在类外进行定义时,需要加模板参数列表template....
2024-08-03 13:15:26 968
原创 C++ 内存管理
new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。学C语言的时候我们学习了malloc,relloc,calloc,free等函数,C++兼容C语言,也可以在C++中运用,但运用起来非常的麻烦,C++提出了自己的内存管理方式:通过new,delete关键字进行动态内存管理。
2024-07-18 15:07:49 617
原创 C++入门超详细——引用
在小学的时候,我们经常给其他同学起外号,像脖子比较长的同学,我们会给那个同学取名“长颈鹿”,“长颈鹿”就是这位同学的别名,引用也可以这样理解,在语法层面上,引用就是取别名。引用不是新开辟一个空间去定义一个变量,是给一个已知的变量取别名,编译器不会给引用变量开辟空间,初始变量和引用变量共用一块空间int a = 0;int& b = a;int c = a;c++;b++;如上,b是a的别名,我们上面也提到了,a和b是共用同一块空间,是不是b++的同时,a也跟着++呢?
2024-06-16 23:14:25 622
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人