c++
文章平均质量分 94
c++内容
随风张幔
这个作者很懒,什么都没留下…
展开
-
c++ - 第26节 - c++知识梳理
(1)需要熟练掌握这些容器的常见接口使用(增删查改:insert、erase、find、operator[]、iterator)(1)需要熟练掌握这些容器的常见接口使用(增删查改:insert、erase、find、operator[]、iterator)(1)需要熟练掌握这些容器的常见接口使用(增删查改:insert、erase、find、operator[]、iterator)1.重点熟练掌握的容器:vector、list、map、set、unoredered_map、unoredered_set。原创 2023-01-20 12:21:37 · 1429 阅读 · 2 评论 -
c++ - 第25节 - STL之空间配置器
SGI-STL以128字节作为小块内存与大块内存的分界线,将空间配置器其分为两级结构,一级空间配置器处理大块内存,二级空间配置器处理小块内存。 直接使用malloc与new进行申请,每块空间前有额外空间浪费(因为每块空间都要开额外的内存空间记录这块空间的大小) 频繁向系统申请小块内存块,容易造成内存碎片。 频繁向系统申请小块内存,影响程序运行效率。 代码结构比较混乱,代码复用率不高。 申请空间失败怎么应对。空间配置器,顾名思义就是。原创 2023-01-17 22:08:28 · 652 阅读 · 0 评论 -
c++ - 第24节 - c++的IO流
2.可以使用这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这部分,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据( 其单位可以是bit,byte,packet )的抽象描述。为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类,用以完成某方面的功能。1.可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏。原创 2023-01-15 17:37:40 · 633 阅读 · 1 评论 -
c++ - 第22节 - 特殊类设计
请设计一个类,不能被拷贝。原创 2023-01-14 18:22:05 · 418 阅读 · 1 评论 -
c++ - 第23节 - C++的类型转换
编译器优化方式一:遇见代码const int a = 2,const类型的变量编译器会在内存中存储一份,在寄存器中存储一份,取地址取的是内存地址,因此后面修改时修改的是内存中的a变量值,寄存器中的a变量值不变,打印时打印的是寄存器中的a变量值。在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。const_cast最常用的用途就是删除变量的const属性,方便赋值。原创 2023-01-13 17:09:08 · 422 阅读 · 0 评论 -
c++ - 第21节 - 智能指针
为什么需要智能指针。原创 2023-01-09 22:05:39 · 1051 阅读 · 0 评论 -
c++ - 第20节 - 异常
没有匹配的catch则退出当前函数栈,继续在调用函数的栈中进行查找匹配的catch。3. 抛出异常对象后,会生成一个异常对象的拷贝,因为抛出的异常对象可能是一个临时对象,所以会生成一个拷贝对象,这个拷贝的临时对象会在被catch以后销毁。5. 实际中抛出和捕获的匹配原则有个例外,并不都是类型完全匹配,可以抛出的派生类对象,使用基类捕获,这个在实际中非常实用,我们后面会详细讲解这个。,缺陷:需要程序员自己去查找对应的错误。1. 异常是通过抛出对象而引发的,该对象的类型决定了应该激活哪个catch的处理代码。原创 2023-01-08 17:40:47 · 449 阅读 · 0 评论 -
c++ - 第19节 - c++11
从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。1998年是C++标准委员会成立的第一年,本来计划以后每5年视实际需要更新一次标准,C++国际标准委员会在研究C++03的下一个版本的时候,一开始计划是2007年发布,所以最初这个标准叫C++07。注:其实c++11支持。原创 2022-12-31 11:54:14 · 537 阅读 · 0 评论 -
c++ - 第18节 - 哈希
注:1. unordered_set是存储key值的关联式容器。2. 在unordered_set中,key值用于惟一地标识元素。3. 在内部,unordered_set没有对key按照任何特定的顺序排序, 为了能在常数范围内找到key,unordered_set将相同哈希值的key放在相同的桶中。4. unordered_set容器通过key访问单个元素要比set快,但它通常在遍历元素子集的范围迭代方面效率较低。5. 它的迭代器是前向迭代器。原创 2022-12-19 12:07:09 · 755 阅读 · 1 评论 -
c++ - 第17节 - AVL树和红黑树
{// 右子树-左子树的高度差int _bf;};注:1.AVL树使用三叉链,每个树结点中使用_parent成员变量保存其父节点的地址。2.树节点中有一个_bf成员变量,该成员变量是balance factor的缩写,记录该节点右子树-左子树的高度差。AVL树并没有规定必须要设计平衡因子,这里使用平衡因子只是一个实现的选择,方便控制平衡。1.3.AVL树的插入%5Cbullet%5Cbullet。原创 2022-12-13 11:42:21 · 395 阅读 · 0 评论 -
c++ - 第16节 - map和set
翻译:1.set是按照一定次序存储元素的容器2.在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3.在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。4.set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。5.set在底层是用二叉搜索树(红黑树)实现的。原创 2022-12-10 10:54:19 · 984 阅读 · 0 评论 -
c++ - 第15节 - 二叉树进阶
具体思路为:定义两个指针parent和cur,cur查找插入位置,parent记录cur上一个位置,当cur找到插入位置时(cur为空时),开辟节点给cur并和parent进行链接。(2)搜索二叉树数据插入的顺序不同,树的形状一般也不同,当以近似有序的数据顺序依次插入,那么二叉树的形状近似一个链表,搜索的时间复杂度接近O(N)情况b:删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点--直接删除。情况c:删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点--直接删除。原创 2022-11-29 11:49:36 · 748 阅读 · 0 评论 -
c++ - 第14节 - c++中的多态
1. 多态的概念1. 多态的概念多态的概念:通俗来说,就是多种形态,。举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。再举个栗子: 最近为了争夺在线支付市场,支付宝年底经常会做诱人的扫红包-支付-给奖励金的活动。那么大家想想为什么有人扫的红包又大又新鲜8块、10块...,而有人扫的红包都是1毛,5毛....。其实这背后也是一个多态行为。原创 2022-11-24 21:54:32 · 550 阅读 · 0 评论 -
c++ - 第13节 - c++中的继承
例如:设计一个图书管理系统,管理系统的角色类可以分为学生、老师、保安等,这些角色的许多数据和方法是大家都有的,比如说名字、年龄、电话等,也有很多数据和方法是每个角色独有的,如果对每个角色都创建一个类初始化这些信息那很多大家都有的信息就设计重复了,写代码要进行复用。这里从类和类中访问限定符的角度来看,封装更好。我们可以设计一个person类,person类里面是每个角色都有的数据和方法,然后再设计每一个角色的类,这些角色的类继承person类,也就是这些角色类也具有person类的数据和方法,如下图所示。原创 2022-11-22 17:13:22 · 554 阅读 · 0 评论 -
c++ - 第12节 - 模板进阶
与vector有一点不同的是array里面存的就是全部的数据,数据全部存在栈里,而vector里面其实只有几个指针,vector里面的数据都存在堆里。如下图所示,容器array类模板的官方库声明中,就有非类型模板参数N,N就是开辟array容器的元素个数。如下图一所示代码定义一个静态栈,这样的代码有一个缺陷就是如果同时定义多个栈,这些栈的大小都是一样的。用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。模板参数分为类型形参与非类型形参。原创 2022-11-21 17:56:06 · 513 阅读 · 0 评论 -
c++ - 第11节 - stack和queue类
注:1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作。原创 2022-11-16 12:10:22 · 2022 阅读 · 0 评论 -
c++ - 第10节 - list类
注:1.普通正向迭代器和普通反向迭代器的使用方式如下图所示。原创 2022-11-14 17:55:46 · 1063 阅读 · 0 评论 -
c++ - 第9节 - vector类
1.标准库中的vector类1.标准库中的vector类注:1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2022-11-08 22:57:57 · 1795 阅读 · 0 评论 -
c++ - 第8节 - string类
C语言中的字符串C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。原创 2022-10-21 11:43:47 · 1270 阅读 · 1 评论 -
c++ - 第7节 - STL简介
目录1. 什么是STL2.STL的版本3.STL的六大组件4.如何学习STL5.STL的缺陷简单总结一下:学习STL的三个境界:能用,明理,能扩展原创 2022-10-21 11:02:52 · 118 阅读 · 0 评论 -
c++ - 第6节 - 模板初阶
1. 泛型编程1. 泛型编程编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。不再是针对某种类型,而是能适应广泛的类型,跟具体的类型无关)如何实现一个通用的交换函数呢?使用函数重载虽然可以实现,但是有一下几个不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数2. 代码的可维护性比较低,一个出错可能所有的重载均出错那能否呢?原创 2022-10-20 10:55:44 · 268 阅读 · 0 评论 -
c++ - 第5节 - c/c++内存管理
1. C/C++内存分布1. C/C++内存分布我们来看下面的一段代码和相关问题1.选择题:选项:A.栈B.堆C.数据段(静态区)D.代码段(常量区)globalVar在哪里?__C__staticGlobalVar在哪里?__C__staticVar在哪里?__C__localVar在哪里?__A__num1在哪里?__A__char2在哪里?__A__*char2在哪里?原创 2022-10-18 21:55:25 · 493 阅读 · 0 评论 -
c++ - 第4节 - 类与对象(下)
在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值构造函数进行初始化相当于是对已经存在的变量赋初值,而初始化列表初始化是在创建变量的同时进行初始化。原创 2022-10-17 11:49:04 · 269 阅读 · 0 评论 -
c++ - 第3节 - 类与对象(中)
主要介绍类的六个默认成员函数原创 2022-05-31 21:20:45 · 251 阅读 · 0 评论 -
c++ - 第2节 - 类与对象(上)
1.面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 2.类的引入 c++兼容了c语言中struct的用法,同时对struct进行了升级,把struct升级成了类升级成类的两个标志:(1)结构体名称可以做类型(2)结构体里面可以定义函数注:1.访问结构体里面的函数,与访问结构体成员类似,形式为...原创 2022-05-24 21:10:15 · 204 阅读 · 0 评论 -
c++ - 第1节 - c++入门
1.C++关键字(C++98)C++总计63个关键字,C语言32个关键字下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再细讲2. 命名空间 1.c++中的#include<iostream>与c语言中的#include<stdio.h>类似,包含IO流,是用来和控制台进行输入输出的2.命名冲突:一种情况,我们要使用rand作为一个变量的变量名,如果不包含stdio.h头文件的话,程序可以正常通过,如果包含...原创 2022-05-15 10:25:48 · 663 阅读 · 0 评论