
C++
文章平均质量分 78
C++学习笔记
NUC_Dodamce
醉生梦死谁成器,拓马长枪定乾坤。
展开
-
C++11_lambda表达式,包装器,bind绑定
文章目录1.lambda表达式1.lambda表达式【捕捉列表】(参数列表)mutable ->返回值类型 {函数体}mutable:默认条件下,lambda表达式默认具有const属性,mutable可以取消其const属性。注意:使用该修饰符时,参数列表即便为空也不能省略参数列表在没有mutable时,如果为空可以省略,返回值类型也可以省略[ ]:捕捉列表,在lambda表达式最开始,编译器可以捕捉上下文变量给lambda表达式使用,减少传参eg:C++swap函数lambda表达式写原创 2022-02-13 13:42:31 · 579 阅读 · 0 评论 -
C++11_完美转发与模板可变参数(std::forward<>,template <class ...Args>,push_back与emplace_back)
文章目录1.完美引用(std::forward<>)右值传参时退化为左值原因2.模板的可变参数3.C++STL中emplace_back)测试emplace_backC++右值引用与移动语义1.完美引用(std::forward<>)在引入完美转发前先分析以下代码#include<iostream>using std::cout; using std::endl;void Fun(int& x) { cout << "左值引用" <原创 2022-02-02 04:53:03 · 4980 阅读 · 2 评论 -
C++11右值引用与移动语义(左值引用与右值引用的区分,移动构造与移动拷贝构造函数,移动构造,移动赋值运算符重载)
文章目录1.左值右值的区别2.左值引用与右值引用3.右值引用的使用场景1.左值右值的区别左值:可以取其地址右值:不能取其地址int b=1;//b为左值int*p=new int(0);//p为左值const int c=10;//c为左值//右值int x=10;int y=3;10;x+y;//表达式计算的值fmax(x,y);//函数返回值2.左值引用与右值引用左值引用:左值引用只能引用左值,不能引用右值const修饰左值引用可以引用左值也可以引用右值int a原创 2022-01-30 05:12:11 · 643 阅读 · 3 评论 -
C++_特殊类设计(只能在堆创建对象的类、只能在栈创建对象的类、单例模式)
文章目录1.只能在堆上创建对象的类2.只能在栈上创建对象的类3.单例模式饿汉模式懒汉模式1.只能在堆上创建对象的类#include<iostream>class HeapOnly//这个类只能在堆上创建{public: static HeapOnly* CreatClass()//静态成员函数可以不需要对象调用类的成员函数 { return new HeapOnly; } HeapOnly(const HeapOnly&) = delete;//C++11代表这原创 2022-01-17 17:30:49 · 526 阅读 · 1 评论 -
C++_海量数据处理布隆过滤器(位图+哈希_C++实现_应用分析)
C++BitSet位图位图的优缺点位图的优点:节省空间,速度快。位图的缺点:只可以处理整数。文章目录1.布隆过滤器提出2.布隆过滤器概念3.C++实现布隆过滤器1.布隆过滤器提出1.新闻客户端推荐系统如何实现推送去重2.论坛用户创建昵称去重等等各种问题用哈希表存储用户记录,缺点:需要空间太大用位图存储用户记录,使用C++哈希中的字符串特换成整数映射到位图中。缺点:无法处理字符串转化为整数的冲突问题,会导致用户昵称没有用过,但还是判定使用过的问题所以将哈希与位图结合,即布隆过滤器原创 2022-01-16 18:34:23 · 547 阅读 · 1 评论 -
C++_BitSet位图(大数处理_C++实现+位图面试题分析+变形)
文章目录1.位图概念2.面试题引出位图C++实现简单的位图3.位图的变形题代码位置1.位图概念位图概念:所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景通常是用来判断某个数据存不存在的。2.面试题引出位图给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】解决思路:首先分析40亿个不重复的整数加载到内存需要的空间大小1G=10^9=10亿字节一个整数=4个字节4G=40亿字节=10亿整数所以40亿整数大概需要16原创 2022-01-16 15:07:13 · 489 阅读 · 0 评论 -
C++哈希函数_哈希表_哈希冲突_负载因子_仿函数_针对字符串的模板特化特化_闭散列(线性探测)哈希表_开散列哈希桶的模拟实现(Key_Value模型数组)
文章目录1.哈希中的基本概念哈希函数常见的哈希函数与缺陷哈希表2.哈希冲突哈希冲突的解决方法(闭散列与开散列)闭散列(开放地址法)负载因子C++实现除留余数法闭散列线性探测哈希表(Key_Value模型)开散列(哈希桶/拉链法)C++实现除留余数法开散列哈希桶(Key_Value模型)3.代码位置1.哈希中的基本概念哈希函数之前的二叉搜索树与红黑树以及顺序结构他们的关键字和它的储存位置没有对应关系,所以在查找一个元素时要经过多次的关键字比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(l原创 2021-12-25 12:46:39 · 1529 阅读 · 6 评论 -
C++二叉搜索树(插入_删除(替换法)_查找_遍历_二叉搜索树检查)_二叉链递归与三叉链非递归
文章目录1.二叉链形式递归2.三叉链形式+动态插入动态删除过程_非递归运行结果二叉搜索树删除节点思路1.二叉链形式递归#pragma once#include<iostream>using namespace std;template<class Key,class Value>struct BSTreeNode{ BSTreeNode<Key,Value>* _left; BSTreeNode<Key,Value>* _right;原创 2021-11-28 16:27:59 · 524 阅读 · 0 评论 -
C++_图解手撕红黑树的插入-查找-判断_KeyValue模型(三叉链)
文章目录1.红黑树概念红黑树的性质2.红黑树KV模型1.红黑树概念先看AVL树:AVL树为高度平衡二叉搜索树AVL树插入的实现再看红黑树:红黑树也是二叉搜索树。但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的红黑树的性质每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的原创 2021-11-24 08:25:16 · 1614 阅读 · 3 评论 -
C++回溯问题框架(N皇后例子+决策树)
本文来自labuladong算法小抄书中。回溯算法问题框架:解决一个回溯问题实际上是一个决策树的遍历过程。文章目录1.决策树2.回溯算法框架1.决策树eg:数字1,2,3进行全排列。先固定数字1,再固定数字2,最后只能是数字3。之后回到选择数字2的位置改变选择选择3,最后选择2…树状图如下:每个节点都要经历一次决策,我们称这棵树为回溯算法的决策树2.回溯算法框架解决回溯问题要思考三个问题1.已经做出的选择:对应上图为已经做过的选择,cur节点上的选择12.选择列表:还可以做的选择。原创 2021-11-17 23:17:23 · 463 阅读 · 3 评论 -
C++_AVL树插入,查找与修改的实现(Key_Value+平衡因子+三叉链)
文章目录1.AVL树的提出平衡因子2.AVL树的节点定义3.AVL树类①AVL树插入节点更新平衡因子当平衡因子变为2或-2时,四种旋转调整AVL树右单旋_右单旋代码左单旋1.AVL树的提出二叉搜索树虽然可以提高搜索效率,但如果数据接近有序的话搜索二叉树的效率退化为链表了。为了解决这个问题,提出了AVL树。向平衡二叉树中插入新节点,保证每个节点的高度差的绝对值小于等于1。降低树的高度,提高搜索效率。这种树称为AVL树平衡因子每个节点的平衡因子=这个节点的右子树高度-这个节点的左子树高度。注意:平衡原创 2021-11-08 22:39:43 · 1509 阅读 · 3 评论 -
C++_STL_map(map.insert返回值,三种统计次数,按照key值排序,按照value值排序(vector/multimap/multiset/优先级队列))
文章目录1.利用map是搜索二叉树特性统计次数2.STL_map.insert()返回值利用map.insert()的返回值来统计次数3.利用[]运算符重载统计次数map中[]运算符重载4.map按照value排序方法一:创建map迭代器数组,调用sort自定义排序规则排序(不稳定)方法二:利用multimap/multiset来改变排序的key(稳定)控制multimap和multiset的键值排序方式(仿函数)方法三:利用优先级队列保存map迭代器指针来对map的value排序(堆排序不稳定)1.利用原创 2021-10-31 19:48:35 · 1607 阅读 · 5 评论 -
C++(刨根问底)_虚函数_多态_抽象类_多态的原理
文章目录1.C++多态的类型(静态/动态)虚函数的定义虚函数的重写2.多态的条件1.C++多态的类型(静态/动态)1.静态的多态静态多态:也称为编译期间的多态,编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。静态多态有两种实现方式:①函数重载:包括普通函数的重载和成员函数的重载注意:函数重载需要在同一作用域中。两个在同一作用域的函数返回值不同不构成函数重载②函数模板的使用2.动态的多态原创 2021-10-25 18:31:19 · 551 阅读 · 1 评论 -
C++ string vector list迭代器设计
list的结构不像vector和stringvector和string其储存数据的空间是连续的,list储存数据的空间是随机的。vector和string的迭代器本质上是指针,其可以支持++ – *等操作。为了让list也可以支持类似指针的行为,所以对list的迭代器进行了封装先看string的迭代器:...原创 2021-08-13 19:53:44 · 311 阅读 · 0 评论 -
C++深浅拷贝与=运算符重载
文章目录=运算符的重载浅拷贝又称值拷贝,类中默认生成的拷贝构造函数使用的是浅拷贝eg:class B{public: B(int n1 = 0, int n2 = 0) :_num1(n1), _num2(n2) {} B(const B &s) { _num1 = s._num1; _num2 = s._num2; }private: int _num1; int _num2;};int main(){ B s1(1,2); B s2(s1);}原创 2021-07-19 17:48:32 · 207 阅读 · 0 评论 -
C++类与对象_this指针
当定义多个对象时,如何区分不同对象eg:#include<iostream>class Date{public: void Init(int year, int month, int day) { _year = year; _month = month; _day = day; }private: int _year; int _month; int _day;};int main(){ Date n1; n1.Init(2021, 6, 25原创 2021-07-16 21:39:19 · 143 阅读 · 0 评论