![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++基础
文章平均质量分 69
小小小~
人工智能爱好者
展开
-
C++四种强制类型转换
type必须是一个类类型,在第一种形式中,type必须是一个有效的指针,在第二种形式中,type必须是一个左值,在第三种形式中,type必须是一个右值。static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换,例如non-const对象转为const对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的安全性。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;原创 2023-08-18 14:49:16 · 518 阅读 · 0 评论 -
C++ 中 const 和 static 关键字(定义,用途)
const 作用:限制可读性1、const修饰基础数据类型const 在基础数据类型前、后结果一样,在使用这些常量的时候不能改变常量的值。修饰符 const 可以⽤在类型说明符前,也可以用在类型说明符后,其结果是一样的。在使用这些常量的时候,只要不改变这些常量的值即可。常量不可修改//Min = 2;常量只读性2、修饰指针变量和引用变量如果const 在 * 左侧 ,则const修饰指针所指向的变量 ,即指针指向常量。原创 2023-08-16 15:18:33 · 408 阅读 · 0 评论 -
C++中重载(overload)、重写(override,也叫做“覆盖”)和重定义(redefine,也叫作“隐藏”)的区别?
指派生类的函数屏蔽了与其同名的基类函数。特点:①函数名称相同,但是返回值可以不同。②作用域分别位于基类和派生类之中;①如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。②如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。所以,此处只要求是同名函数,不管参数列表是否相同,基类函数都会被隐藏。原创 2023-08-15 21:14:10 · 1697 阅读 · 0 评论 -
C++智能指针
C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。头文件:#include < memory>原创 2023-08-15 20:13:56 · 122 阅读 · 0 评论 -
匈牙利算法详解
匈牙利算法(Hungarian Algorithm)是一种组合优化算法(combinatorial optimization algorithm),用于求解指派问题(assignment problem),算法时间复杂度为O(N^3)。Harold Kuhn发表于1955年,由于该算法基于两位匈牙利数学家的早期研究成果,所以被称作“匈牙利算法”。假设有三位工人A,B和C,需要分配他们每人完成一件工作;对于不同的工作他们所需要花费的时间不同,如下表所示。问题就是要找到一套耗时最小的指派方案。原创 2023-08-08 17:02:43 · 8827 阅读 · 0 评论 -
算法与数据结构(六)
表示方法如下:32767100。原创 2023-07-02 22:09:56 · 390 阅读 · 0 评论 -
算法与数据结构(五)
1)、首先,我们需要知道每一个节点的层数:每一个节点的层数是其父节点层数+1所以,我们在push一个节点的孩子节点进入队列时,可以保存其孩子节点的层级:当前层级+1。从上图可以看出,在中序遍历中,所有结点都是升序的,即为搜索二叉树。2、弹出队列中的第一个结点,然后打印该结点,并将该节点的左右子节点先后放到队列中(没有左或者右则直接跳过放另外一个结点)。1、将压入结点下的每颗子树整棵树左边界进栈(第一次先从根节点开始),对于下图,进栈的为(1,2,4)宽度优先遍历输出为:1,2,3,4,5,6,7,8,9。原创 2023-06-09 21:32:28 · 886 阅读 · 0 评论 -
算法与数据结构(四)
链表结构原创 2023-06-08 10:05:27 · 619 阅读 · 0 评论 -
算法与数据结构(三)
在c++中,原创 2023-06-05 20:54:40 · 587 阅读 · 0 评论 -
算法与数据结构(三)——排序算法大总结
但我们并不能确定待排元素中究竟哪一部分是有序的,所以我们一开始只能认为第一个元素是有序的,依次将其后面的元素插入到这个有序序列中来,直到整个序列有序为止。在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。实际上,我们可以一趟选出两个值,一个最大值一个最小值,然后将其放在序列开头和末尾,这样可以使选择排序的效率快一倍。5.tem插入到该元素的后面,如果已排序所有元素都大于tem,则将tem插入到下标为0的位置。左边大于右边交换一趟排下来最大的在右边。原创 2023-06-01 22:04:42 · 470 阅读 · 0 评论 -
算法与数据结构(二)
力扣刷题:归并排序原创 2023-03-07 22:34:09 · 319 阅读 · 0 评论 -
算法与数据结构(一)
一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一个指标。常用O(读作big O)来表示。具体来说,这个算法流程中,发生了多少常数操作,进而总结出常数操作数量的表达式。评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间,也就是“常数项时间”。选择排序、冒泡排序的时间复杂度为ON2,额外空间复杂度为O1以上两种排序算法不管数组内部是什么情况,都需要执行固定的操作,但是。原创 2023-02-27 17:40:16 · 575 阅读 · 0 评论 -
c++提高篇——STL常用算法
算法主要是由头文件 组成。是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、追历操作、复制、修改等等。体积很小,只包括几个在序列上面进行简单数学运算的模板函数。定义了—些模板类.用以声明函数对象。原创 2023-02-24 21:35:00 · 2318 阅读 · 1 评论 -
c++提高篇——函数对象
重载函教调用操作符的类,其对象常称为函数对象。函数对象使用重载的()时,行为类似函数调用,也叫仿函数。函数对象(仿函数)是—个类,不是—个函数。1、函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值2、函数对象超出普通函数的概念,函数对象可以有自己的状态函数3、对象可以作为参数传递。原创 2023-02-23 10:49:11 · 347 阅读 · 0 评论 -
c++提高篇——map/multimap容器
map中所有元素都是pair,palir中第一个元素为key (键值),起到索引作用,第二个元素为value(实值)。所有元素都会根据元素的键值自动排序。map/multimap属于关联式容器,底层结构是用二叉树实现。可以根据key值快速找到value值。map不允许容器中有重复key值元素,multimap允许容器中有重复key值元素。原创 2023-02-23 09:29:02 · 167 阅读 · 0 评论 -
c++提高篇——set/multiset容器
在set容器中所有元索都会在插入时自动被排序,底层结构是用二叉树实现的。set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素。原创 2023-02-22 21:51:52 · 453 阅读 · 0 评论 -
c++提高篇——list容器
将数据进行链式存储链表((list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的,链表由一系列结点组成。:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指域。链表可以对任意位置快速进行插入和删除元素。容器遍历速度没有数组快。占用的空间会比数组大,因为数组的数据存放只有数据,而链表分为数据域和指针域,需要存放的内容更多。STL中的链表是一个双向循环链表:之所以称之为双向,是因为STL的指针域中存放的既有前一个节点的地址,又有后一个节点的地址。原创 2023-02-22 11:12:21 · 296 阅读 · 0 评论 -
c++提高篇——queue容器
Queue是一种先进先出(FIFO)的教据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据。原创 2023-02-21 11:15:43 · 666 阅读 · 0 评论 -
c++提高篇——stack容器
stack是一种先进后出(FILO)的数据结构,它只有一个出口。栈中只有顶端的元素才可以被外界使用。因此该容器不能有遍历行为。基本的结构如下:stack容器有些像手枪子弹的弹夹,其数据的出入栈可以以弹夹为参考。原创 2023-02-21 10:36:54 · 459 阅读 · 0 评论 -
c++提高篇——STL容器实现打分系统
有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。原创 2023-02-21 10:09:18 · 544 阅读 · 0 评论 -
c++提高篇——deque容器
deque容器是一个双端数组,可以对头端进行插入删除操作,也可以对尾端进行如上的操作,它与vector容器有所差异,具体体现如下:1、 vector对于头部的插入删除效率低,数据量越大,效率越低2、 deque相对而言,对头部的插入删除速度比vector快3、 vector访问元素时的速度会比deque快,这和两者内部实现有关具体的内部结构如下所示:deque内部有中控器维护每段缓冲区中的内容,缓冲区中存放真实数据,中控器维护的是每个缓冲区的地址,使得使用deque时像—片连续的内存空间。deq原创 2023-02-21 09:09:53 · 267 阅读 · 0 评论 -
c++提高篇——vector容器
vector教据结构和数组非常相似,也称为单端数组,但是数组是静态空间,而vector可以动态扩展。动态的扩展流程如下:动态扩展并不是在原空间之后续接新空间,而是找更大的广存空间,然后将原数据拷贝新空间,释放原空间。vector容器的迭代器是支持随机访问的迭代器,也就是说可以随机访问容器内的任何一个位置的数据。原创 2023-02-20 15:20:26 · 906 阅读 · 0 评论 -
c++提高篇——string容器
string是C++风格的字符串,而string本质上是一个类。与c语言不同,string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。在根本上与c语言字符串是一致的。原创 2023-02-19 22:04:39 · 456 阅读 · 0 评论 -
c++提高篇——Vector容器
vecor容器的基本使用方法原创 2023-02-19 11:24:05 · 1813 阅读 · 0 评论 -
C++提高篇——STL基础
长久以来。软件界一直希望建立一种可冲复利用的东西。C++的面向对象和泛型编程思想,目的就是复用性的提升。大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作,为了建立数据结构和算法的一套标准,诞生了STL。STL(Standard Template Library,标准模板库)从广义上分为:容器(container)算法(algorithm)迭代器(iterator),容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数。STL大体分为六大组件。原创 2022-11-28 09:45:15 · 238 阅读 · 0 评论 -
c++提高篇——模板(下)
之所以报这么错误就是因为类模板不像函数模板一样,它并不能自动推导出传入数据的类型,因此会报如上错误。类模板可以建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚拟的类型来代表。这是类模板的一个特有的功能,在函数模板中是没有这个功能的。这种语法与函数模板一致,具体的内容请见上一篇博客。1.指定传入的类型:直接显示对象的数据类型。1、普通类中的成员函数一开始就可以创建。2、类模板中的成员函数在调用时才创建。原创 2022-11-20 22:37:06 · 337 阅读 · 0 评论 -
c++提高篇——模板(上)
模板就是建立通用的模具,大大提高复用性。原创 2022-11-18 22:40:29 · 461 阅读 · 0 评论 -
c++基础(十七)——职工管理系统实现
基于多态的职工管理系统的实工程原创 2022-11-13 21:45:50 · 738 阅读 · 0 评论 -
c++基础(十六)——文件的操作
程序运行时产生的数据都属于临时数据,程序一旦运行结柬都会被释放。我们可以通过文件可以将数据持久化。C++中对文件操作需要包含头文件< fstream >:1.文本文件-文件以文本的ASCII码形式存储在计算机中;2.二进制文件-文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们;:1.ofstream:写操作2.ifstream :读操作3.fstream :读写操作。原创 2022-11-08 22:16:05 · 356 阅读 · 0 评论 -
c++基础(十五)——多态
多态顾名思义就是有多种状态,我们之前学的函数重载以及运算符重载就是多态的一种表现形式。3、函数返回值的类型、函数的名称、参数列表要完全相同(这种方法也称为重写)。1、静态多态:函数重载和运算符重载属于静态多态,复用函数名。下列的样例就是通过virtual方法来实现地址晚绑定。1、静态多态的函数地址早绑定,编译阶段就确定了函数地址。2、动态多态的函数地址晚绑定,在运行阶段才确定函数地址。多态是C++面向对象三大特性之一。父类的指针或者引用指向子类的对象。2、子类要重写父类的虚函数。原创 2022-11-04 22:49:58 · 380 阅读 · 0 评论 -
c++基础(十四)——继承
继承是面向对象三大特性之一,有些类与类之间存在特殊的关系,当定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码。基本语法:其中,子类也称为派生类;父类也称为基类。其中派生类中的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员。从基类继承过来的表现其共性,而新增的成员体现了其个性。样例如下:二、继承方式基类中有如下几种不同的属性,分别为公共属性,保护属性和私有属性,那么反映到继承中有如下三种:维承方式一共有三种:原创 2022-11-02 22:58:51 · 218 阅读 · 0 评论 -
c++基础(十三)——c++运算符重载
对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。原创 2022-10-29 22:11:10 · 246 阅读 · 0 评论 -
c++基础(十三)——全局函数做友元
友元可以让一些私有属性被类外特殊的一些函数或者类进行访问,换句话说,友元的目的就是让一个函数或者类访问另一个类中私有成员。友元的关键字为:friend。原创 2022-10-03 20:03:40 · 841 阅读 · 0 评论 -
c++基础(十二)——const修饰成员函数
在成员函数中都会隐藏一个this指针,而this指针的本质是指针常量(不可以修改指针的指向)。而const修饰成员函数时,实际上是const Person * const this这一语法。这就造成了指针的指向以及指向的值都不可以修改了。对象含有与成员勇函数数"Person:acd”不兼容的类型限定符对象类型是: const Person。因为常对象是不允许修改对象的属性的,而普通的成员对象是可以修改属性的,因此会产生如上问题。3、成员属性声明时加关键字mutable后,在常函数中依然可以修改。原创 2022-09-30 21:55:21 · 4145 阅读 · 0 评论 -
c++基础(十一)——空指针访问成员函数
引发了异常: 读取访问权限冲突。之所以会报这样的错误是因为p(即为person)为一个空指针,这个对象并没有一个实体。当一个空值访问其中的属性,则会报如上的错误。为了避免以上的错误,一般的会用一个if语句来进行判断,去避免这一错误。在c++中,空指针也可以调用成员函数,但是要注意有没有用到this指针,如果用到了this指针,则需要对代码的健壮性进行判别。原创 2022-09-11 21:16:05 · 692 阅读 · 0 评论 -
c++基础(十)——c++对象模型和this指针
在c++中,类内的成员变量和成员函数分开存储,每一个非静态成员函数只会诞生一份函数实例,也就是说,多个同类型的对象会共用一块代码。只有非静态成员变量才属于类的对象上,其余的都不属于(静态成员变量、成员函数、静态成员函数)。,至于为什么会占用1字节的存储空间呢?之所以占用1字节的内存空间,是为了区分空对象占内存的位置。换句话说,如果我们通过同一个类创建多个对象,为了区分这些对象的不同,则会用1个字节的空间来区分它们。且每一个空对象会有一个独一无二的内存地址。原创 2022-09-04 21:01:51 · 438 阅读 · 0 评论 -
c++基础(九)——静态成员
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。原创 2022-09-01 21:58:22 · 661 阅读 · 0 评论 -
c++基础(八)——类对象作为类成员
c++类中的成员可以是另一个类的对象,可以称该成员为对象成员B类中有对象A作为成员,A为对象成员。原创 2022-09-01 20:59:50 · 1683 阅读 · 2 评论 -
c++基础(七)——初始化列表
c++提供了初始化列表语法,用来初始化属性其语法为:构造函数():属性1(值1),属性2(值2)…{}下列方法为在初始化中常用的传统初始化方法。原创 2022-08-31 21:13:34 · 381 阅读 · 0 评论 -
c++基础(六)——深拷贝与浅拷贝
浅拷贝:简单的赋值拷贝操作深拷贝:在堆栈区重新申请空间,进行拷贝操作。原创 2022-08-29 21:06:20 · 428 阅读 · 0 评论