
C++
从0到1
爱上小公举
希望明天的我
仍然对不同充满宽容
继续对未知饱含敬畏
展开
-
哈希表(散列表) -- 概念原理以及代码实现
哈希函数1. 闭散列线性探测闭散列的扩容两个小问题闭散列的简单实现2.开散列开散列的增容开散列与闭散列比较有迭代器的开散列实现开散列实现unordered_map哈希的应用原创 2020-02-24 22:03:14 · 1231 阅读 · 0 评论 -
C++ 关联式容器之unordered_map
说到关联式容器, 需要区分是序列式容器, 例如vector, list, deque等都是序列式容器, 序列式其特点都体现在 "序列"上 .序列式容器中存储元素是线性排布的, 在进行查找搜索时效率较低. 序列式容器并不会对插入元素进行任何方式的重新排序,插入在哪个位置就在哪个位置 .关联式容器, 特点也体现在 "关联"上, 关联式容器通过键值对(包括key和value), 将存储的每一个数据value与一个键值key一一对应起来, 只需要通过键值key就可以读写元素, 在查找搜索时效率高. 关联式容器原创 2020-02-23 21:36:00 · 3262 阅读 · 0 评论 -
C++ 智能指针(auto_ptr/unique_ptr/shared_ptr)
目录为什么需要智能指针?智能指针的原理1. RAII特性2. 重载operator* 和opertaor->auto_ptr(已废弃)常用接口auto_ptr总结unique_ptr常用接口unique_ptr总结shared_ptr常用接口shared_ptr原理shared_ptr线程安全的问题shared_ptr循环引用问题循环引用解决方法shared_ptr删除器原创 2019-12-06 19:47:01 · 937 阅读 · 1 评论 -
C++ 使用delete释放new[N]的问题
了解过C++的语法知识, 就应该知道, new 申请的空间用 delete 释放, new [] 申请的连续空间用delete [] 释放, 这样肯定是没什么问题, 是正确的. 但当我们不遵循规则时会怎样呢?虽然在我们自己在开发过程肯定不会主动地乱用, 但保不齐哪天delete后面多写或少写个[], 如果了解过的话, 出bug了我们可以快速定位目录1.new [] 申请的空间用 ...原创 2019-11-20 01:20:46 · 4147 阅读 · 4 评论 -
C/C++ const修饰指针变量的三种情况
在C/C++中, const修饰指针变量, 有三种情况, 以 int* 为例, 三是以下种情况原则: const修饰谁, 谁就不能被修改, 否则编译出错第一种和第二种: constint* p; 和 int const * p;这两种情况是相同的, 这两种情况变量p的类型是const int* 型, 此时const修饰的就是p所指向的内容, 也就是说p解引用之后的值不能被...原创 2019-11-14 00:40:37 · 611 阅读 · 1 评论 -
C++ 重载, 重定义, 重写
先来看看定义重载 : C++允许同一作用域中有同名函数, 这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同(返回值类型无要求),在处理实现功能类似数据类型不同的问题上保证了接口的统一性重写 : 也叫覆盖. 在继承关系中, 派生类中有跟基类完全相同(返回值类型、函数名字、参数列表完全相同) 的虚函数,称派生类的虚函数重写了基类的虚函数(注意: 重写有两个函数名不同...原创 2019-11-09 10:11:51 · 1493 阅读 · 0 评论 -
C++ 多态
目录多态多态的实现C++中多态的构成条件虚函数虚函数的重写虚函数重写的两个例外C++11 override 和 final抽象类纯虚函数接口继承和实现继承虚表&多态的原理小结前言C++三大特性: 封装, 继承, 多态也是面向对象的三大特性说明 : 本文程序都是在vs2017下的x86下调试运行多态面向对象语言中,接...原创 2019-11-09 10:05:12 · 670 阅读 · 0 评论 -
C++ 虚表 & 多态的实现原理
目录虚函数指针(_vfptr) 和 虚函数表(vftable) 虚函数指针和虚表是什么继承中的虚表单继承中的虚表多继承中的虚表多态的原理小结相关博客: 1. 关于C++继承的博客戳链接( ̄︶ ̄)↗https://blog.youkuaiyun.com/qq_41071068/article/details/1028684772. 关于C++多态的博客...原创 2019-11-09 10:05:18 · 2379 阅读 · 15 评论 -
C++ 继承
继承方式基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员菱形继承与虚拟继承虚拟继承虚拟继承解决数据冗余和二义性的原理继承和组合小结前言C++三大特性: 封装, 继承, 多态也是面向对象的三大特性说明 : 本文程序都是在vs2017下的x86下调试运原创 2019-11-04 21:30:39 · 702 阅读 · 0 评论 -
C++篇 C/C++中的内存区域&new/delete
目录C++程序内存区域划分C动态内存管理方式C++动态内存管理方式 new delete 1. new 和 delete用法 2. operator new与operator delete函数 3.new 和 delete 的实现原理 定位new表达式(placement-new) ...原创 2019-10-30 19:14:52 · 1182 阅读 · 4 评论 -
C++ 模板扩展(非类型模板参数和模板特化)
目录非类型模板参数模板的特化函数模板特化类模板特化: 全特化 偏特化模板的分离编译模板基础非类型模板参数在我们平时使用模板时, 非类型模板参数用的较少一些, 其实在模板参数可以分为两种 :类型参数 : 在关键字class 或者typename 之后的类型名称 例如 int , char, string , 也可以是自己实现的自定义类型非类...原创 2019-10-28 19:20:01 · 1058 阅读 · 0 评论 -
C++ queue (STL容器适配器)
1. 队列是一种容器适配器,专门用于在(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用push_back:在队原创 2019-10-15 23:50:17 · 781 阅读 · 1 评论 -
C++STL容器之list和常用接口的实现
目录1. vector的常用接口2. list常用接口实现简介1. list这个容器的底层是双向带头循环结构实现的2. list每个不支持随机访问(所以就没有[]重载, 迭代器也不能进行加减运算, 只能++和--), 访问元素O(n)的时间复杂度(不如vector, vector可以随机访问, 复杂度为O(1))3. list在任何位置插入或删除都很快, 都是O(1)的复杂度...原创 2019-10-14 18:49:23 · 1048 阅读 · 0 评论 -
C++ stack (STL容器适配器)
目录适配器stackstack的使用stack模拟实现适配器适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),适配器是将一个类的接口转换成客户希望的另外一个接口。举个栗子, 咱们香港的插头和我们内地是不一的, 如下图, 这种插头在咱们内地是不方便使用的, 要是香港同胞到对岸深圳转一转, 被繁华的深圳所吸引, 不禁多留...原创 2019-10-15 22:54:34 · 893 阅读 · 1 评论 -
C++ priority_queue (STL容器适配器)
优先队列priority_queue是一个堆1. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。但容器必须可以通过随机访问迭代器访问,并支持以下操作:empty():检测容器是否为空size():返回容器中有效元素个数front():返回容器中第一个元素的引用push_back():在容器尾部插入元素pop_back():删除容器尾部元素2. 标准容器类vector和deque满足这些需求。默认情况下,如果没有为特定的priority_queue类实例化原创 2019-10-16 11:02:59 · 680 阅读 · 0 评论 -
C++初阶 入门
目录C++关键字(C++98)命名空间C++输入输出缺省参数函数重载引用内联函数auto关键字(C++11)基于范围的for循环(C++11)指针空值nullptr(C++11)C++类与对象(上)C++类与对象(中)C++(98) :1998年,C++的ANSI/IS0标准被投入使用。通常,这个版本的C++被认为是标准C++。所有的主流...原创 2019-09-04 21:08:26 · 426 阅读 · 0 评论 -
C++ 类与对象(上)
目录 认识类与对象类的引入类的定义类的访问限定符及封装类的作用域类的实例化类对象模型this指针C++ 类与对象(中) C++ 类与对象(下)认识类与对象C语言是面向过程的,关注的是过程(过程中的数据(变量)和方法(函数)),分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象(对...原创 2019-09-08 09:49:40 · 684 阅读 · 2 评论 -
C++ 类与对象(中)
目录 C++类与对象(上)类的6个默认成员函数一.构造函数二.析构函数三.拷贝构造函数四.赋值运算符重载五,六.取地址及const取地址操作符重载C++ 类与对象(下)类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。一.构造函...原创 2019-09-09 01:04:43 · 946 阅读 · 0 评论 -
C++类与对象(下)
目录 C++类与对象(上)C++类与对象(中)static成员C++11 的成员初始化新方法explicit关键字友元内部类再次理解封装static成员我们不妨回忆一下C中的static用法C语言中static用法(点击跳转)声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的...原创 2019-09-10 19:56:58 · 794 阅读 · 0 评论 -
C++ Date类运算符重载
C++ Date类运算符重载+=, -=, -(两日期相减), -(日期-天数), +, ++(前置), ++(后置), --(前置), --(后置), =, <<, >>, <, >, <=, >=, !=, ==值得注意的是, 闰年并不是4年一闰, 我们通常习惯理解为4年一闰闰年判断条件(year % 400 == 0 || ...原创 2019-09-12 18:01:48 · 624 阅读 · 0 评论 -
C++ 模板基础
目录 泛型编程 模板函数模板与模板函数类模板模板扩展泛型编程如何实现一个通用的交换函数呢 ?#include<iostream>using namespace std;void Swap(int& a, int& b) { a = a ^ b; b = a ^ ...原创 2019-09-14 16:41:00 · 292 阅读 · 2 评论 -
C++ string类和常用接口的实现
目录 C++ string类string类的常用接口说明 string类(实现常用接口)C++ string类值得注意的是 , string不是STL的容器,string是basic_string类模板的一个实例,string是一个模板类, 它使用char来实例basic_string,string集成的操作函数与ST...原创 2019-09-19 22:14:10 · 2172 阅读 · 0 评论 -
C++ STL容器之vector和常用接口的实现
目录vector的常用接口vector常用接口实现简介1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质上来说,vector使用动态分配数组来存储它的元素。当新元素...原创 2019-09-26 22:56:04 · 1989 阅读 · 0 评论 -
(C++)举例说明可以使用const代替#define以消除#define的不安全性
举例说明可以使用const代替#define以消除#define的不安全性在C中习惯使用#define来定义常量, 例如 :#define N 100实际上这种方法只是在预编译时进行了字符置换, 把程序中出现的标识符N 全部置换成100. 在预编译之后, 程序中不再有N这个标识符. N不是变量,没有类型, 不占存储单元, 且易出错 .C++中提供了一种更灵活, 更安全的方式来定义常量...原创 2019-05-15 23:50:21 · 3063 阅读 · 0 评论