![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
黑米姐姐
喜欢就要做到极致
展开
-
delete this的问题
在复习this指针部分时,遇到了一个常考的面试题class A{ public: ~A() { delete this; }};请问这段代码会出现什么问题,首先我们可以从两部分来分析:在编译阶段,他没有任何语法问题,编译通过;但是在运行阶段,代码会崩溃,因为在类的析构函数中调用delete this,delete this本身会调用本对象的析构函数,而析构函数中又调...原创 2020-02-11 20:41:25 · 384 阅读 · 0 评论 -
C++进阶:C++11
列表初始化在C++98中,我们可以使用花括号对数组元素进行统一的列表初始值设定,例如:int arr1[] = { 1, 2, 3, 4, 5 };int arr2[5] = { 0 };对于一些自定义类型,无法使用花括号进行初始化,例如:vector<int> v{ 1, 2, 3, 4 };无法通过编译,导致每次定义vector时,都需要先把vector定义出来,然...原创 2019-12-02 16:24:11 · 420 阅读 · 0 评论 -
C++进阶:C++类型转换
在C语言中,转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换转换使用场景:(1)对对象(变量)进行初始化;(2)对对象(变量)进行赋值;(3)传参;(4)返回值接收;static_caststatic_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换(相当于C语言中隐...原创 2019-11-22 17:50:01 · 140 阅读 · 0 评论 -
C++进阶:封装unordered_map和unordered_set以及海量数据面试题
使用哈希桶对unordered_map和unordered_set进行封装、海量数据面试题(位图的介绍、布隆过滤器、倒排索引)、unordered_map与map的相同和不同原创 2019-11-19 14:22:44 · 383 阅读 · 0 评论 -
C++进阶:哈希结构
哈希相关概念哈希:用来进行高效查找的一种数据结构首先,我们查找的方式有:(1)顺序查找,它的时间复杂度是O(n)(2)二分查找(有序),它的时间复杂度是O(log2N)(3)利用二叉平衡搜索树(AVL、红黑树):时间复杂度是O(log2N)(4)哈希,时间复杂度是O(1)前三种方法元素之间都要进行比较,因此时间复杂度降不下来,而哈希元素之间不需要比较(最差情况下只需少许比较即可找到)...原创 2019-11-13 15:44:40 · 245 阅读 · 0 评论 -
C++进阶:STL之树形结构的关联式容器4(底层结构:红黑树)
红黑树的概念、性质(重要)、定义、实现(重要)、插入(重要);红黑树的迭代器、改造红黑树、使用红黑树实现map和set(重要)原创 2019-11-05 21:07:19 · 320 阅读 · 0 评论 -
C++进阶:STL之树形结构的关联式容器3(底层结构相关:AVL树)
AVL树虽然二叉搜索树可以提高查找的效率,但是如果数据有序或者接近有序,就有可能退化成单支树,查找元素相当于在顺序表中搜索元素,效率低下;因此,有两位数学家提出了解决上述问题的方法,就是当向二叉搜索树中插入某个结点后,保证每个结点的左右子树之差的绝对值不大于1,这需要对树中的结点进行调整。一棵AVL树是空树,或者满足:左右子树都是AVL树并且左右子树高度之差(平衡因子)的绝对值不超过11...原创 2019-10-22 20:55:20 · 302 阅读 · 0 评论 -
C++进阶:STL之树形结构的关联式容器2(底层结构相关:二叉搜索树)
底层结构二叉搜索树1、概念:二叉搜索树又称二叉排序树,它可以是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树2、二叉搜索树的操作(1)先实现构造(2)查找:给定一个值data,如果data等于根结点的值,返回true表示找到了,如果data&...原创 2019-10-22 20:13:00 · 250 阅读 · 0 评论 -
C++进阶:STL之树形结构的关联式容器1(接口与使用)
关联式容器的概念关联式容器也是用来存储数据的,但与序列式容器不同,它存储的是<key,value>的键值对,在数据检索时比序列式容器效率高键值对的概念用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。例如apple它有一个对应的中文名称,它和中文名称一一对应,即通过该单词在词典中可以找到对应的中...原创 2019-10-22 20:12:37 · 161 阅读 · 0 评论 -
C++进阶:智能指针
为什么需要智能指针智能指针:管理指针,自动释放资源智能指针的使用及原理例如:template <class T>class Smartptr{public: Smartptr(T* ptr = nullptr) :_ptr(ptr) {} ~Smartptr() { if (_ptr) delete[]_ptr; } T& opera...原创 2019-10-02 16:14:01 · 238 阅读 · 1 评论 -
C++进阶:异常
异常的概念程序可以正常运行,并且可以得到预期的结果,称为正常,而程序无法运行,程序无法得到预期的结果,称为异常。程序消亡程序消亡有几种形式:(1)程序正常结束—main—return 0;(2)自杀(自己将自己结束),例如打开一个文件,如果为空,exit(1);(3)他杀(被别人给杀死),C语言传统的处理错误的方式1、 终止程序,如assert,缺陷:用户难以接受。如发生内存错误...原创 2019-10-01 11:28:55 · 156 阅读 · 0 评论 -
C++进阶:多态
声明:本次代码和解释都是在vs2013 下的x86程序,涉及的指针都是4bytes的什么是多态?1、多态的概念:同一件事物,在不同场景下,表现出的不同的状态,就是多态,例子:见人说人话,见鬼说鬼话多态的定义和实现1、多态的实现条件:(1)必须在继承体系中(2)基类中必须有虚函数,派生类必须对基类中的虚函数进行重写(3)虚函数调用:通过基类的指针或者引用调用虚函数体现:在代码运行时...原创 2019-09-29 15:47:38 · 149 阅读 · 1 评论 -
C++进阶:继承
继承的概念、继承的权限、赋值兼容规则、继承作用域、继承中的构造和析构规则、防止类被继承的方法、继承与友元、继承与static、多继承、菱形继承与菱形虚拟继承、虚表虚基表指针、继承与组合、笔试面试题原创 2019-09-24 22:57:46 · 179 阅读 · 0 评论 -
C++:双端队列(deque)及容器适配器(stack/queue/priority_queue)
双端队列概念双端队列是一个动态大小的序列式容器,底层结构是一个假想的连续空间,如图为它的底层结构:在内存空间中,双端队列大致就是这样的结构,当A行已经满了的时候,想要尾插,开辟一个和它一样大的空间B,尾插,要进行头插,开辟一个和他一样大小的空间C,然后开辟P空间,即map,按照顺序存储A、B、C的首地址即可。例如:申请一个动态的二维数组(N*M)int** Get2Array(i...原创 2019-09-17 17:21:39 · 276 阅读 · 0 评论 -
C++:list的使用及模拟实现
list的概念及使用概念:list的底层数据结构是带头双向循环链表,是可以在任意位置进行插入和删除的序列式容器,并且该容器可以进行前后迭代。使用:1、构造:list():构造空的listlist(size_t n,const value_type& val=value_type()):n个值为val的元素构造listlist(const list& x):拷贝构造函数...原创 2019-09-17 13:59:45 · 232 阅读 · 0 评论 -
C++:vector的应用与模拟实现
vector:(存放任意类型的动态顺序表)原创 2019-09-12 19:16:41 · 107 阅读 · 0 评论 -
C++:string类的模拟实现
string类模拟实现模拟实现string类源代码(github)https://github.com/wangbiy/C-/tree/master/test_2019_9_9_1原创 2019-09-09 19:45:51 · 191 阅读 · 0 评论 -
C++:string类的应用
string类的应用,在线OJ笔试题,深浅拷贝(重点),写时拷贝原创 2019-09-09 15:33:54 · 250 阅读 · 0 评论 -
C++:STL(六大组件介绍)
STL概念STL是C++中标准模板库,是常见数据结构的封装以及通用的算法(与数据的类型无关,与数据结构无关)详细解释:六大组件1、容器:常见的数据结构(按照模板的方式封装)2、算法:与具体数据结构相关的算法+通用类型的算法3、迭代器:作用是让算法对数据结构透明化—>不关心数据采用的是什么数据4、适配器:stack:只能在其一端进行数据的删除和插入;queue:在其一端进行数据的...原创 2019-09-07 13:37:57 · 338 阅读 · 0 评论 -
C++:模板
一般我们是如何生成通用的加法函数?例如:int Add(int left, int right){ return left + right;}double Add(double left, double right){ return left + right;}short Add(short left, short right){ return left + right;...原创 2019-09-04 17:11:13 · 157 阅读 · 0 评论 -
C++:C/C++内存管理
C/C++内存管理方式及相关面试题(特殊类的设计)原创 2019-08-10 17:13:06 · 162 阅读 · 0 评论 -
C++:类和对象3
再谈构造函数初始化列表例如:class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; }private: int _year; int _month; int _day;};虽然上面的构造函数调用之后,对象中已经...原创 2019-08-06 15:31:56 · 160 阅读 · 0 评论 -
C++:类与对象2
类的6个默认构造函数构造函数例如构造一个日期类class Date{public: void DateInit(int year, int month, int day) { _year = year; _month = month; _day = day; } void printDate() { cout << _year << ...原创 2019-08-03 19:10:37 · 313 阅读 · 0 评论 -
C++:类与对象1
类的定义例如:class className{}; class为定义类的关键字,className为类的名字,{}中为类的主体,类定义结束时后面加分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数如何定义一个类类有两种定义方式,一种是声明和定义都放在类体中,一种是声明放在.h文件中,定义放在.c文件中用struct定义类和...原创 2019-08-02 17:14:56 · 105 阅读 · 0 评论 -
C++:C++入门
关键字、命名空间、缺省参数、函数重载、引用、内联函数(替代C语言中宏变量和宏函数的问题)、auto关键字、范围for循环 、控制指针nullptr原创 2019-07-23 17:20:30 · 155 阅读 · 0 评论