- 谢谢您的到来,一起加油吧,少年!
- bilibili点个关注叭
- 海鸟跟鱼相爱,只是一场意外
- Leave Out All The Rest
随笔分类 - C++核心编程
1
摘要:lambda表达式 lambda表达式概述 我们可以向一个算法传递任何类型的可调用对象。对于一个对象或一个表达式,如果可以对其使用调用调用运算符,则称它为可调用的。即,如果 e 是一个可调用的表达式,则我们可以编写代码 e(args) ,其中 args 是一个逗号分隔的一个或多个参数的列表。 通常
阅读全文
摘要:智能指针原理 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,**C++11中引入了智能指针的概念,方便管理堆内存。**使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时
阅读全文
摘要:位图 概念 位图: 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。 适用场景: 如果我们需要对大量的数据进行处理,判断该数据在不在,比如40亿个整形数据,如果我们用unordered_set来存放这些数据,大约需要占用16G的内存,显然这是
阅读全文
摘要:列表初始化 用法 在C++98中,{}只能够对数组元素进行统一的列表初始化,但是对应自定义类型,无法使用{}进行初始化,如下所示: // 数组类型 int arr1[] = { 1,2,3,4 }; int arr2[6]{ 1,2,3,4,5,6 }; // 自定义类型(C++98不支持下面这种初
阅读全文
摘要:unordered_set unordered_set是以无特定顺序存储唯一元素的容器,并且允许根据它们的值快速检索单个元素,是一种K模型。 在unordered_set中,元素的值同时是它的key,它唯一地标识它。键值是不可变的,因unordered_set中的元素不能在容器中修改一次 ,但是可以
阅读全文
摘要:vector容器补充(下面会用到) 我们都知道vector容器不同于数组,能够进行动态扩容,其底层原理:所谓动态扩容,并不是在原空间之后接续新空间,因为无法保证原空间之后尚有可配置的空间。而是以原大小的两倍另外配置一块较大空间,然后将原内容拷贝过来,并释放原空间。因此,对 vector 的任何操作需
阅读全文
摘要:关联式容器 关联式容器也是用来存储数据的,与序列式容器(如vector、list等)不同的是,其里面存储的是<key,value>结构的键值对,在数据检索时比序列式容器效率更高。今天要介绍的的四种容器是树形关联式容器:map、set、multimap和multiset。它们的底层都是用红黑树来实现的
阅读全文
摘要:红黑树 概念和性质 红黑树的概念: 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。它是通过控制节点颜色的方式来控制这棵树的相对平衡,保证了没有一条路径会比其它路径长出两倍,红黑树是一种接近平衡的二叉树(说它是接近平衡因为它并没有像AVL树的平衡因子的
阅读全文
摘要:AVL树(平衡二叉树) 概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此为了解决这个问题,两位俄罗斯的数学家发明了一种方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要
阅读全文
摘要:顺序的概念与结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 一般分为两种:静态顺序表和动态顺序表 静态顺序表 #define N 100 typedef int SLDataType;//以便可以存储不同类型的数据 type
阅读全文
摘要:stack stack介绍 stack是一种先进后出的数据结构,只有一个出口,类似于栈。stack容器哦允许新增元素,移除元素,取得栈顶元素,但是除了最顶端之后,没有任何其他办法可以存取stack的其他元素,换句话说,stack不允许有遍历的行为。 元素推入栈的操作称为:push 元素推出栈的操作称
阅读全文
摘要:list介绍 list的本质是一个带头的双向循环链表。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另 一个是存储下
阅读全文
摘要:迭代器 四种迭代器 容器类名::iterator 迭代器名;//正向迭代器 容器类名::const_iterator 迭代器名;//常量正向迭代器,const修饰,只能用于读取容器内的元素,不能改变其值 容器类名::reverse_iterator 迭代器名;//反向迭代器 容器类名::const_
阅读全文
摘要:引入 void mySwapint(int &a, int &b) { int tmp = a; a = b; b = tmp; } void mySwapdouble(double& a, double& b) { double tmp = a; a = b; b = tmp; } 不知道大家看到
阅读全文
摘要:继承 概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。 语法: //基类(父类)
阅读全文
摘要:内存分区 栈区(stack):存放函数形参和局部变量(auto类型)和返回值,由编译器自动分配和释放 堆区(heap):用于动态内存分配该区由程序员申请后使用,需要手动释放否则会造成内存泄漏。如果程序员没有手动释放,那么程序结束时可能由OS回收 全局/静态存储区:存放全局变量和静态变量(包括静态全局
阅读全文
摘要:运算重载符 概念: 运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数原型: 返回值 operator操作符(参数列表) 注意: 运算符重载,就是对已有的运算符重新进行定义,赋予其另外一种功能,以适应不同的数据类型 不能通过重载
阅读全文
摘要:面向过程与面向对象 C语言是面向过程的,关注的是过程(函数),分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 类的引入与定义 类的引入 C语言中,结构体内部只能定义变量,C++中的结构体不仅可以定义变量,还可
阅读全文
摘要:命名空间 概述 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。 举个例子: #include <s
阅读全文
摘要:
基本数据类型 数据类型是程序的基础:他告诉我们数据的意义以及我们能在数据上执行的操作。 C语言中定义了很多数据类型,有基本数据类型,自定义的构造数据类型(C语言中的结构体,C++中的类),还有指针类型.......这次主要讲的是基本数据类型,结构体和指针会在后面进行复习阐述。 不同的基本数据类型所能
阅读全文

1