C++
文章平均质量分 94
C++讲解
饿了我会自己捡代码吃
是什么?为什么?怎么用?
展开
-
【C++11】initializer_list、可变参数模板详解
在C++98及这前的版本中类模版和函数模版中只能含固定数量的模版参数C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板模板参数包是一个特殊的模板参数,它表示零个或多个模板参数。在函数模板或类模板的定义中,可以使用省略号(…)来声明一个模板参数包。// Args是一个模板参数包,args是一个函数形参参数包// 声明一个参数包Args...args,这个参数包中可以包含0到任意个模板参数。// 这里可以使用递归或循环来展开参数包。原创 2024-07-20 21:29:11 · 1005 阅读 · 0 评论 -
【C++11】 lambda表达式和包装器(function、bind)
lambda表达式书写格式:[capture-list] (parameters) mutable -> return-type { statement }[capture-list] : 捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用。必写)(parameters):参数列表。与普通函数的参数列表一致,如果不需要参数传递,则可以连同()一起省略。原创 2024-07-15 21:37:14 · 756 阅读 · 0 评论 -
【数据结构】布隆过滤器的原理讲解及其底层实现和海量数据问题
1. 增加和查询元素的时间复杂度为:O(K), (K为哈希函数的个数,一般比较小),与数据量大小无关2. 哈希函数相互之间没有关系,方便硬件并行运算3. 布隆过滤器不需要存储元素本身,在某些对保密要求比较严格的场合有很大优势4. 在能够承受一定的误判时,布隆过滤器比其他数据结构有这很大的空间优势5. 数据量很大时,布隆过滤器可以表示全集,其他数据结构不能6. 使用同一组散列函数的布隆过滤器可以进行交、并、差运算。原创 2024-07-13 11:33:50 · 924 阅读 · 0 评论 -
位图(Bitset)的应用及其原理数据结构介绍
【代码】位图(Bitset)的应用及其原理结构介绍。原创 2024-07-12 09:44:43 · 1225 阅读 · 0 评论 -
【数据结构】深入理解哈希及其底层数据结构
桶的个数是一定的,随着元素的不断插入,每个桶中元素的个数不断增多,极端情况下,可 能会导致一个桶中链表节点非常多,会影响的哈希表的性能,因此在一定条件下需要对哈希表进行增容,那该条件怎么确认呢?开散列最好的情况是:每个哈希桶中刚好挂一个节点, 再继续插入元素时,每一次都会发生哈希冲突,因此,在元素个数刚好等于桶的个数时,可以给哈希表增容。闭散列:也叫开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有 空位置,那么可以把key存放到冲突位置中的“下一个” 空位置中去。原创 2024-07-11 16:45:27 · 998 阅读 · 0 评论 -
【高阶数据结构】红黑树详解
在前面我们学习了平衡二叉树,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现,除了AVL树,下面我们要学习的红黑树也是处理二叉树自身缺陷的一种方式RED,BLACK,_kv(kv),_col(RED){}原创 2024-06-12 21:47:26 · 1265 阅读 · 0 评论 -
【数据结构】AVL树(平衡二叉树)
AVL树是一个平衡的二叉搜索树,它的每个节点的左右子树高度差的绝对值不超过1,因此,哪怕最坏也只是查找高度次,保证了查询时高效的时间复杂度O(log_n)。但是它的缺陷也很明显:如果我们要对AVL树做一些修改方面的操作时,它的性能就十分低了,因为在修改时我们还要维护它的绝对平衡,旋转的次数比较多,而且在删除时,最坏情况可能会更新到根节点。所以,如果只是需要一种查询高效且有序的数据结构,且数据个数为静态(不改变),比较适合AVL树,但如果你需要经常修改的话,AVL树可能就不太适合了原创 2024-06-10 20:39:17 · 1235 阅读 · 1 评论 -
二叉搜索树(BST,Binary Search Tree)
为何学?1.二叉搜索树是一种树形结构,是一种查找效率非常高的结构,值得我们去学习2.map和set的底层也是二叉搜素树,学习二叉搜索树可以让我们更好的了解set和map的特性。原创 2024-06-06 21:38:32 · 773 阅读 · 0 评论 -
C++多态详解
在继承中构成多态有两个条件:1.必须通过基类的指针和引用调用虚函数 2.被调用的函数必须是虚函数 ,且派生类必须对基类的虚函数进行重写多态调用时在运行时在虚函数表找函数的地址,进行调用,所以指向父类调的是父类的虚函数,指向子类调用的是子类的虚函数而普通调用时是在编译时,通过调用者类型确定函数地址原创 2024-05-24 20:27:52 · 1170 阅读 · 5 评论 -
C++继承详解
Person是父类,也称作基类。Student是子类,也称作派生类。在C++中,出现类型转换时会产生临时变量。作为C++面向对象三大特性之一,继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。原创 2024-05-22 08:58:20 · 953 阅读 · 3 评论 -
C++模板超详解
C++模版,泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础平时我们在编写代码的时候,都要十分在意函数或是类的参数类型,整形就只能调用整形的函数浮点类型就只能调用浮点类型的函数,而泛型编程是编译一种通用的代码,与类型无关下面举个例子:平时我们怎么写一个交换函数?因为数据类型有很多种,我们不知道要传的数据是什么类型,所以我们会用函数重载的方式写多个重载函数,但是缺点也很明显。原创 2024-04-25 12:19:09 · 1042 阅读 · 2 评论 -
【C++】STL之string 超详解
string是表示字符串的字符串类,该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作,下面是C++的官方网站,若有疑问,可在网站中查询学习。原创 2024-02-12 18:36:51 · 1064 阅读 · 2 评论 -
C++中的类的6个默认成员函数详解
内置类型就是语言提供的数据类型,如:int/char...,自定义类型就是我们使用class/struct/union等自己定义的类型,看看下面的程序,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数。原创 2024-01-19 10:34:04 · 947 阅读 · 2 评论 -
C++初阶 入门篇
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机 界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言 应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。原创 2024-01-16 19:23:02 · 1032 阅读 · 1 评论