c++
文章平均质量分 79
Y—X
这个作者很懒,什么都没留下…
展开
-
C++数据结构——哈希表
文章目录1.unordered_map/unordered_set2. 底层结构2.1哈希概念2.2哈希函数2.3常见哈希函数2.4 哈希冲突3.闭散列(开放定址法)3.1线性探测3.2闭散列扩容-载荷因子3.3二次探测4.开散列4.1开散列增容1.unordered_map/unordered_setunordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,原创 2021-06-13 17:58:09 · 1797 阅读 · 1 评论 -
红黑树特性和实现详解——C++进阶数据结构
1.红黑树的概念红黑树是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。2.红黑树的性质每个结点不是红色就是黑色根结点是黑色的如果一个结点是红色的,则它的两个孩子结点是黑色的对于每个结点,每条路径上都有相同数量的黑结点每个叶子结点都是黑色的(此处的叶子结点指的是空结点,上图的NIL结点)思考:为什么满足上面的性质,红黑树就能保证:原创 2021-06-05 18:17:34 · 1925 阅读 · 24 评论 -
AVLTree(二叉平衡树)底层实现
文章目录1. AVL树的概念1.1 AVL树节点的定义1.2 AVL树的插入1.3AVL树的旋转处理1.3.1右单旋1.3.2左单旋1.3.3 左右双旋1.3.4 右左双旋1.4完整代码实现及验证1. AVL树的概念如果二叉搜索树的插入序列是有序的或者是接近有序,那么二叉搜索树就会退化为单支树(类似单链表),查找元素相当于在顺序表中搜索元素,时间复杂度为O(N)。AVLtree(Adelson Velskii Landis tree)是一个加上额外平衡条件的二叉搜索树,左右子树高度之差(简称平衡因子)原创 2021-05-31 17:23:00 · 482 阅读 · 1 评论 -
set和map
1. 键值对**用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。**比如一个英汉互译的字典,每个英文单词都对应着一个翻译val。SGI-STL中关于键值对的定义:template <class T1, class T2>struct pair{typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair(): fi原创 2021-05-28 12:55:25 · 803 阅读 · 3 评论 -
C++____二叉搜索树
1. 二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树int a [] = {5,3,4,1,7,8,2,6,0,9};template <class K>struct BSTreeNode{ K _key; BSTreeNode<K>* _left; BSTreeNode原创 2021-05-23 15:45:25 · 200 阅读 · 1 评论 -
二叉树的前中后序非递归法
题目集合:144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历前序遍历:思路:前序非递归遍历需要借助栈如果树为空,直接返回如果树非空:从根节点位置开始遍历,因为前序遍历规则:根节点、左子树、右子树a. 沿着根节点一直往左走,将所经过路径中的节点依次入栈,并访问。b. 取栈顶元素,该元素取到后,其左子树要么为空,要么已经遍历,可以直接遍历该节点,对于该节点,其左子树已经遍历,该节点也已经遍历,剩余其右子树没有遍历,将其左子树当成一棵新的树开始遍历,继续a/**原创 2021-05-17 21:28:56 · 152 阅读 · 6 评论 -
C++__多态
1. 多态的概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写2.4 虚函数重写的两个例外2.5 C++11 override 和 final2.6 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类3.1 接口继承和实现继承4.多态的原理4.1虚函数表4.2 动态绑定与静态绑定原创 2021-05-10 10:59:27 · 558 阅读 · 11 评论 -
C++___继承
1. 继承的概念2. 继承的定义格式2.1 继承关系和访问限定符3.基类和派生类对象赋值转换4.继承中的作用域5. 派生类的默认成员函数6.继承与友元7. 继承与静态成员8.复杂的菱形继承及菱形虚拟继承(重点)9.继承的总结和反思10. 常见继承题原创 2021-05-01 18:12:05 · 541 阅读 · 6 评论 -
C++___stack&&queue&&priority_queue
文章目录1. stack的介绍和使用2. queue的介绍和使用3. priority_queue的介绍和使用3.1模拟实现priority_queue4.仿函数1. stack的介绍和使用2. queue的介绍和使用3. priority_queue的介绍和使用优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成大堆的结构。传入less是大堆,传入greater是小堆,和我们常识是相反的。3.1模拟实现priority_q原创 2021-04-21 14:54:11 · 404 阅读 · 3 评论 -
C++——list的使用及模拟实现
文章目录1.list1.1list的构造1.2list的iterator使用1.3list的增删查改2.list的模拟实现1.listlist的优点:list头部、中间插入不再需要挪动数据,O(1)效率高list插入数据是新增节点,不需要增容list的缺点:不支持随机访问,访问某个元素效率O(N)底层节点动态开辟,小节点容易造成内存碎片,空间利用率低,缓存利用率低1.1list的构造list()构造空的listlist(size_type n,const val原创 2021-04-12 16:23:44 · 341 阅读 · 0 评论 -
C++___vector的模拟实现
1.vector深度剖析及模拟实现1.1 std::vector的核心框架接口的模拟实现myVector::vector1.2 使用memcpy拷贝问题原创 2021-04-07 15:27:24 · 904 阅读 · 1 评论 -
C++___vertor
1. vertor的介绍2. vector的使用2.1vertor的定义2.2 vector的遍历2.3 vector的容量2.4 增删查改3.vector 迭代器失效问题原创 2021-04-05 16:30:56 · 2035 阅读 · 2 评论 -
Leetcode___只出现一次的数字Ⅰ和Ⅱ
解题思路:由于题目已告知数组是整数数组且是非空的,只有某个元素只出现一次,其它元素均出现两次。我们自然而然地会相到位运算中的“异或”,两个相同的数字异或的结果为 0,由于数组中其它元素均出现两次,只有一个元素出现一次,所以可以遍历整个数组,让所有数组元素异或,得到的结果就是只出现一次的那个元素。说明:a ^ a = 0; 0 ^ a = a代码示例:class Solution {public: int singleNumber(vector<int>& nums.原创 2021-04-03 19:12:07 · 155 阅读 · 0 评论 -
260. 只出现一次的数字 III
题目:给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。方法一:分组异或先对所有数字进行一次异或,得到两个出现一次的数字的异或值。在异或结果中找到任意为 1 的位。根据这一位对所有的数字进行分组。在每个组内进行异或操作,得到两个数字。class Solution {public: vector<int> singleNumber(vector<int>&原创 2021-04-02 14:12:17 · 128 阅读 · 0 评论 -
C++__string类的使用
文章目录String类string常见接口1.1 string类对象的常见构造1.2 string类对象的容量操作1.3 访问遍历1.4 修改操作String类string在底层实际是:basic_string模板类的别名,typedef basic_string<char> string;在使用string类时,必须包含#include头文件以及using namespace std;string常见接口1.1 string类对象的常见构造1.string(): 构造空的s原创 2021-03-30 12:18:03 · 205 阅读 · 1 评论 -
C++——(函数模板,类模板)
1.泛型编程2.函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则3.类模板3.1 类模板的定义格式3.2 类模板的实例化原创 2021-03-12 22:15:19 · 224 阅读 · 1 评论 -
C++——内存管理(new/delete和malloc/free的区别)
1.c++内存分布2.new和delete的用法2.1new/delete操作内置类型2.2new和delete操作自定义类型2.3operator new与operator delete函数3.面试题:new和delete的区别原创 2021-03-12 16:21:43 · 494 阅读 · 1 评论 -
类和对象——(初始化列表,explicit关键字,static成员,友元)
1.初始化列表2.explicit关键字3.static成员概念:4.友元4.1友元函数4.2友元类原创 2021-03-10 12:53:07 · 1810 阅读 · 13 评论 -
C++——类和对象(中)
文章目录1.类的6个默认成员函数2.构造函数3.析构函数4.拷贝构造函数5.运算符重载5.1 运算符重载5.2赋值运算符重载6.const成员1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。默认成员函数就是,我们不写编译器会自动生成一份,我们写了就用我们写的。2.构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值原创 2021-02-07 13:52:07 · 499 阅读 · 0 评论 -
C++——类和对象(上)
1.类的定义class className{// 类体:由成员函数和成员}; // 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量;类中的函数称为类的方法或者成员函数。定义方式:...原创 2021-02-02 16:38:53 · 841 阅读 · 0 评论 -
C++——入门知识(引用,内联函数,auto关键字,增基于范围的for循环,指针空值nullptr)
1.引用引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体;int main(){ int a = 10; int& b = a;//b是a的别名,b是a的引用,这里的&不是取地址符合。 printf("%p\n", &a); printf("%p\n", &b); return 0;}注意:引用类型必须和引用实体是同种类型的原创 2021-02-01 20:26:33 · 1275 阅读 · 0 评论 -
C++——入门知识(命名空间、输入&输出、缺省参数、函数重载)
1.命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。1.1命名空间定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员.1、命名空间——域namespace N1 // N1为命名空间的名称{ // 命名空间中的内容,既可原创 2021-01-31 21:07:01 · 1476 阅读 · 4 评论