C++
MisakiFx
个人博客:https://misakifx.github.io/
展开
-
【Cpp】第十九章-Cpp11新特性
Cpp11新特性 Cpp11中新增了很多新的语法,很多之前我们都已经有介绍过初始化列表如何使用 在Cpp11中允许使用初始化列表初始化任何类型,不论是内置类型还是自定义类型都可以使用初始化列表进行初始化,而在Cpp98的版本中是不能初始化自定义类型的。#include <iostream>#include <vector>class Test{publ...原创 2019-11-10 15:54:51 · 780 阅读 · 0 评论 -
【Cpp】第十八章-空间配置器
空间配置器什么是空间配置器 空间配置器是为各个容器高效管理空间的工具,负责空间的申请与回收,虽然一般情况下我们用不到它,但是研究空间配置器可以让我们对STL有更深的理解。为什么需要空间配置器 我们之前在实现各个容器的时候,需要申请空间大的地方都是通过new申请的,但是这样的申请方式有着很大的缺陷: 1、空间申请和释放需要自己管理,容易造成内存泄露。 2、频繁向系统申请小块内存,...原创 2019-11-06 20:48:43 · 212 阅读 · 0 评论 -
【Cpp】哈希的应用
哈希的应用 哈希思想在算法中的应用繁多其重要性是不言而喻的,这里简单介绍两种哈希在大数据中的应用。位图算法思路 假如说有这么一种情景:给40亿个不重复的无符号整数,没排过序,判断一个无符号整数是否在这40亿个数中。 首先我们从时间考虑,假如说我们遍历40亿个数,事件复杂度是On的,如果我们先排序再用二分查找,排序要ONlogN二分查找要OlogN也还是不够快。不过这道题最重要的不是...原创 2019-11-06 15:56:29 · 583 阅读 · 0 评论 -
【Cpp】第十七章-unordered版本关联式容器
unordered系列关联式容器什么是unordered系列 unordered系列的关联式容器有unordered-map/unordered-set/unordered-multimap/unordered-multiset,这些版本的关联式容器和普通版本的又有什么区别呢?我们简单使用下和普通版本的做一个对比。#include <iostream>#include <...原创 2019-11-04 21:59:12 · 296 阅读 · 0 评论 -
【Cpp】第十六章-关联式容器
关联式容器 STL中关联式容器有以下几种map/set/multimap/multiset/unordered_map/unordered_set/unordered_multimap/unordered_multiset,所谓关联式容器即他们内部存储的是具有关联性的key-value形式的键值对。本文先从他们的基础使用开始讲起,逐渐深入到底层实现原理,并且最后从二叉搜索树到红黑树再到哈希桶逐...原创 2019-11-02 20:33:18 · 237 阅读 · 0 评论 -
【Cpp】第十五章-类型转换
类型转换C中的类型转换 C语言中的类型转换分为隐式类型转换和强制类型转换两种。#include <stdio.h>int main(){ //隐式类型转换 int i = 10; double d = i; printf("%d, %.2lf\n", i, d); //强制类型转换 i = (int)d; printf...原创 2019-10-18 17:24:36 · 220 阅读 · 0 评论 -
【Cpp】第十四章-智能指针
智能指针基础概念为什么要有智能指针 首先先看一段程序,看看这段程序可能会出现什么问题。#include <iostream>using namespace std;void Func(){ int* ptr = new int[10]; //...假设这其中有很多代码 throw "error!"; // delete[] ptr;}...原创 2019-10-17 21:04:15 · 584 阅读 · 0 评论 -
【Cpp】第十三章-异常
异常传统C中处理错误的方式 以往我们在写C语言程序时,当用户的错误输入或者非期望结果发生时我们的程序有可能就会开始不正确的走向,此时我们为了程序的可靠性和健壮性往往需要对结果进行判断,并且防止一些非预期行为的发生。在C语言中我们程序在发生错误时我们往往会通过以下几种方式来阻止程序继续向错误方向执行,并且向外返回错误。返回错误码 返回错误码就是我们常说的返回值,每个函数都有一个返回值,我...原创 2019-09-24 18:21:07 · 862 阅读 · 0 评论 -
【Cpp】第十二章-多态
多态 几乎所有面向对象语言我们总能在其中听到这么几个特点,封装,继承,多态,对于Cpp也不例外,那么什么是多态,Cpp又是如何实现多态的呢?多态的概念 什么是多态?多态就是当不同的对象去完成某种相同的事务时却展现出完全不同的行为状态。在生活中也存在着各种各样的多态,例如当我们要买票时不同的人有着不同的票,学生票,成人票等等;又比如说当别人家的孩子到你家来做客时,你父母对待你和对待ta之间...原创 2019-09-23 20:29:04 · 441 阅读 · 0 评论 -
【Cpp】《Effective C++》第一章-让自己习惯C++
这是我在学习《Effective C++》中总结得出的心得与体会,完全是以我自己的理解所作的笔记,是对个人经验的积累。基于第三版我以每个章节进行总结,全书一共九个章节。第一章-让自己习惯C++条款01:视C++为一个语言联邦 View C++ as a federation of languages. 在初期Cpp被开发之初,Cpp并没有如今这样丰富的功能,它更应该被称为仅是一个带...原创 2019-09-16 18:14:17 · 187 阅读 · 0 评论 -
【Cpp】第十一章-继承
继承什么是继承 继承是为了更好的使代码得以复用而产生的,同时呈现了面向对象程序设计中的层次结构,继承会使得我们写好的类可以得到扩展。简单来说继承可以增强我们的代码复用,包括可以复用类的层次结构,同时使程序复用层次和条理。#include <iostream>#include <string>using namespace std;class Person{...原创 2019-08-26 22:16:50 · 546 阅读 · 0 评论 -
【Cpp】第十章-模板进阶
模板进阶 之前的博客已经介绍过模板的概念,这是Cpp在实现泛型编程中不可缺少的一环,在模板进阶的讨论中会着重于模板的更为高级的使用。非类型模板参数使用 在模板中我们通常都是定义一个类型模板参数,在进行实例化的时候通过传入类型来实例化模板,但是模板中也可以定义非类型的模板参数。用一个封装的定长顺序表进行举例。#include <iostream>#include <...原创 2019-08-19 18:45:39 · 180 阅读 · 0 评论 -
【Cpp】第九章-STL_stack类和queue类
stack类和queue类 stack和queue以及priority_queue(优先级队列)是STL中三大容器适配器,将其称为容器适配器是因为其在底层只是对现有容器进行的了封装而并没有重新实现。因此在容器适配器中都有让传入容器的模板参数。容器适配器 适配器是一种设计模式,在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:将一个类的接口转换成客户希望的另外一个接口。适配器模...原创 2019-08-05 18:07:31 · 358 阅读 · 0 评论 -
【Cpp】第一章-Cpp入门
第一章 C++入门C++简介什么是C++ C语言是面向过程式的语言,在处理小规模的问题时则能体现出其简单易上手的的优势,但是在面对大型程序或需要高度抽象化的程序时,C语言就显得略有鸡肋。在20实际80年代,计算机界为了解决软件危机提出了面向对象(OOP)思想的变成模式,于是支持OOP的编程语言也应运而生。 1982年Bjarne Stroustrup博士在C语言的基础上引入并且扩充了面...原创 2019-05-11 23:12:06 · 443 阅读 · 0 评论 -
【Cpp】第二章-类和对象(中)
类和对象类的六个默认成员函数 在我们构建一个类之后即使我们在其中不写任何的成员函数,在其中也会有6个默认编译器自动生成的成员函数,这些函数构成了类的基本功能包括初始化,销毁后的清理工作等。当然这些自动生成的成员函数功能有限有时候或许无法达到预期的效果,因此我们可以对其进行重载让其能够达到我们需要的功能。 1、构造函数 2、析构函数 3、拷贝构造函数 4、赋值运算符重载函数 ...原创 2019-05-17 15:03:20 · 139 阅读 · 0 评论 -
【Cpp】第二章-类和对象-下
类和对象初始化列表 我们之前想要在类创建时就对类进行初始化时使用构造函数直接在构造函数中对成员变量进行赋值。但是这种方法并非是最好的方法,并且有一些情况比如说常成员函数我们就无法在构造函数中初始化,因此有了新的对成员进行初始化的方法——初始化列表。使用 初始化列表是和构造函数写在一起的,会在执行成员函数函数体之前优先利用初始化列表对成员变量赋予初值。#include <iost...原创 2019-05-28 15:12:09 · 143 阅读 · 0 评论 -
【Cpp】第三章-内存管理
内存管理C++内存管理 在C语言中,我们想要动态分配内存空间需要使用到malloc,calloc,realloc函数,在C++中我们同样有动态进行内存管理的方式,并且与C语言中的内存管理有着一些区别。new/delete 在C++中我们使用new进行内存的申请,用delete进行内存的释放。他们的使用比malloc和free更加简单方便。内置类型的内存分配与释放#include &...原创 2019-06-11 01:37:43 · 338 阅读 · 0 评论 -
【Cpp】第四章-模板初阶
泛型编程 在我们进行大型程序的编写时往往会遇到一类问题,同一个函数或类我们希望多种类型数据传入时都能完成类似或者相同的功能,但是在C语言中我们很难做到这一点因为我们往往在换了一个数据类型后就要重新写一遍函数,这样耽误我们大量的时间,呢么有没有一种语法在Cpp中能够使让我们的代码成为一种模板,不同的数据类型传入也依然能够执行类似的功能呢? 正所谓世界是由懒人创造的,于是在C++中引入了模板这...原创 2019-07-15 20:15:15 · 184 阅读 · 0 评论 -
【Cpp】第六章-STL_vector类
vector类基础介绍 vector类是STL中另一大容器,它十分类似于一个顺序表,不过经过封装它已经变成了一个可变长度并且拥有各种功能的顺序表,在其内部我们可以通过利用数组进行实现。vector是很常用的容器,因为它支持随机访问,并且尾插和尾删拥有O1的时间复杂度。但是在中间插入时要更高的时间复杂度,最差情况下需要遍历整个数组才能进行插入。它与string的物理与逻辑结构上十分相似,不过它...原创 2019-07-24 22:35:08 · 213 阅读 · 0 评论 -
【Cpp】第七章-STL_listl类
list类基础介绍 list类是STL中封装的链表模板类,并且底层实现是以双向链表作为基础进行封装的。在数据结构中,线性存储结构中主要分为顺序表和链表,前者在物理结构上拥有连续的内存空间和地址,在STL中vector和string都是使用了这种结构,其最大的特点就是方便进行随机访问并且尾插和尾删都能达到O1的时间复杂度并且使用方便,而链表作为物理结构上内存空间不连续的数据结构,其最大的特点就...原创 2019-07-29 23:16:10 · 274 阅读 · 0 评论 -
【Cpp】第八章-STL_deque类
deque类基础介绍 deque是双端队列,它提供了和vector类似的接口但是底层的实现与vector完全不同,vector底层用三个指针指向数组的起点,尾部和总容量的尾部,并且所有元素都是连续的,但是在deque中所有元素并不一定都是在连续的内存空间上的。deque在底层实现上是将一个连续的空间分段进行管理,并将它们的首地址用一个指针数组进行管理,这样特殊的存储结构使得它在头部和尾部增加...原创 2019-07-30 16:55:36 · 176 阅读 · 0 评论 -
【Cpp】第五章-STL_string类
string类STL STL是Standard Template Library的简称,中文名为是标准模板库,在Cpp中模板是构成泛型编程的基础,我们利用模板可以极大程度地提高我们的代码复用率,但是如果模板要我们现写也有点过于繁琐,不过好在Cpp中为我们写代码方便为我们制作了一套标准地模板库,供我们直接使用十分方便。STL的版本 STL发展至今也不是一气呵成的,随着发展和进化,STL一...原创 2019-07-22 20:55:57 · 310 阅读 · 0 评论 -
【Cpp】第二章-类和对象(上)
类和对象 从本章开始我们就要开始学习C++ 中的最为重要的部分,也是让C++ 得以实现面向对象,得以更加方便的进行大型项目编程的最重要的部分——类和对象,类和对象的存在使C++得以完成封装。类和对象初步认识简介 什么是类什么是对象呢? 类可以看作是一个类别,是一类事物的抽象和归纳。比如在现实世界中类可以是兔子,可以是人,可以是某一个职业,这是一类事物,我们将其抽象出来,而并非具体的。与...原创 2019-05-15 00:04:33 · 130 阅读 · 0 评论