C++
文章平均质量分 97
C++打怪升级之路
不 良
知足,上进,不负野心!!!
展开
-
【C++】STL——set和map及multiset和multimap的介绍及使用
在前面学过的STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是结构的键值对,在数据检索时比序列式容器效率更高。本篇介绍的set和map就是关联式器。关联式容器中数据和数据之间有非常强的关联关系,不能随意插入。键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个原创 2023-08-03 16:46:23 · 375 阅读 · 11 评论 -
【C++】多态
多态的概念:简单来说,就是多种形态,具体点就是去完成的某个行为,当不同的对象去完成时会产生出不同的状态。比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买时是优先买票。这就是一种多态行为。多态的定义和实现。多态的构成条件;多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:1、必须通过基类的指针或者引用调用虚函数;2、被调用原创 2023-07-29 08:20:39 · 832 阅读 · 45 评论 -
【C++】继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,而继承便是类设计层次的复用。例如当我们想实现一个学校人员的管理系统,其中每个对象类都具有一些相同的属性(校长、辅导员、学生都具有姓名,年龄等这些相同的的属性),有些类型具有共性,我们把这些公有的属性提取出来都放到一个类中,让其他的类去继承,继承……原创 2023-07-27 08:39:02 · 778 阅读 · 28 评论 -
【C++】string类模拟实现
string类底层是字符数组,所以我们可以根据库中的string类来定义模拟实现的string类中的成员变量。模拟实现string析构函数、拷贝构造函数、赋值运算符重载、访问及遍历函数、重载运算符[]、迭代器函数begin和end;容量相关函数:size函数、capacity函数、empty函数、clear函数、reserve函数、resize函数;修改操作相关函数:push_back函数、append函数、+=运算符重载、c_str函数、find函数、insert函数、swap函数、erase函数……原创 2023-07-20 12:03:39 · 469 阅读 · 49 评论 -
【C++】模板进阶—非类型模板参数、模板特化及模板的分离编译
模板进阶—非类型模板参数、模板特化及模板的分离编译。模板参数可分为类型形参和非类型形参。类型形参: 出现在模板参数列表中,跟在class或typename关键字之后的参数类型名称。非类型形参: 就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用……原创 2023-07-18 09:23:07 · 934 阅读 · 19 评论 -
【C++】priority_queue使用与模拟实现
1、priority_queue(优先级队列)是一种容器适配器,底层是一个完全二叉树的大堆(堆总是一颗完全二叉树,根结点最大的堆叫做大堆;根结点最小的堆叫做小堆),头文件在中,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。不按照先进先出,优先级高的先出,默认数字大的优先级高。2、类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。3、优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,priority_queue提供一组特定的成员函数原创 2023-07-13 21:29:46 · 599 阅读 · 31 评论 -
【C++】STL——stack和queue使用及模拟实现
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作……原创 2023-07-10 20:57:08 · 445 阅读 · 27 评论 -
【C++】list模拟实现
list相当于带头节点的双向链表,我们定义节点时要用类模板参数,同时定义_next、_prev指针和数据_data,使用struct定义类,因为节点类要能够被访问,而struct的默认访问权限就是public;构造函数缺省值要使用匿名对象,保证无论是自定义类型还是内置类型都能够构造成功……原创 2023-07-08 21:02:39 · 709 阅读 · 12 评论 -
【C++】STL——list介绍及使用
list是一种可以在常数时间复杂度O(1)内对任意位置进行插入删除的序列式容器,并且该器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立结点当中,在结中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似,最主要的不同在于forward_list是单链表,只能进行单方代。与其他容器相比,list通常在任意位置进行插入、删除元素的执行效率更高。list和forward_list最大的缺陷是不支持在任意位置的随机访问,其次,lis……原创 2023-07-06 08:12:20 · 728 阅读 · 40 评论 -
【C++】vector模拟实现
为了防止与标准库当中的vector产生命名冲突,模拟实现时需放在自己的命名空间当中。从库中的代码可以看出iterator是T类型的指针,但是VS中的不是原生指针,所以不要只认为iterator就是指针。start指向的是容器中第一个元素;finish指向的就是最后一个元素的下一个位置;指向的是整个数组的下一个位置。函数能看出指定对象类型。所以当我们模拟实现vector时,可以将成员变量设置为模板类型的指针_start_finish和。原创 2023-07-04 23:47:32 · 391 阅读 · 38 评论 -
【C++】vector介绍及使用
vector 是一个类模板,可以根据不同的模板参数实例化出存储不同数据的类。 vector 类可以用来管理数组,与 string 类不同的是,string只能管理 char 类型的数组,而vector可以管理任意类型的数组,vector 类相当于一个动态增长的顺序表。类模板中有两个参数:第一个是数据类型,第二个是空间配置器。1.vector是表示可变大小数组的序列容器。2.vector就像数组一样,vector也采用连续存储空间来存储元素,也就意味着可以采用下标对vector的元素进行访问,和数组一样高效。原创 2023-07-03 20:20:28 · 313 阅读 · 25 评论 -
【C++】string类常见题目详解
题目列表:仅仅反转字母、字符串中的第一个唯一字符、字符串最后一个单词的长度、验证回文串、字符串相加、反转字符串……原创 2023-06-26 10:32:03 · 805 阅读 · 22 评论 -
【C++】STL——string类详解
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。C语言中字符串数组不方便修改,所以C++提供了一个string类。由于历史原因string类比STL产生的早一些,所以……原创 2023-06-24 19:02:31 · 775 阅读 · 31 评论 -
【C++】模板初阶——函数模板和类模板
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。模板可分为类模板和函数模板。函数模板概念函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版。template叫做函数模板的参数列表使用template关键字定义模板,具体的数据类型是什么由需要确定。模板仅仅对后面紧跟的那个函数起作用,当再定义新的函数后需要重新定义模板。注意typename是用来定义模板参数的关键字,也可以用class代替,但是不能……原创 2023-06-23 16:35:36 · 397 阅读 · 14 评论 -
【C++】内存管理
C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。new和delete、new[]和delete[]都是操作符,而malloc/realloc/calloc/free都是函数。new和delete操作内置类型……原创 2023-06-22 09:09:34 · 347 阅读 · 25 评论 -
【C++】日期类常见题目详解
求1+2+3+...+n、计算日期到天数转换、日期差值、打印日期、日期累加。内部类的方法进行求解,通过调用n次构造函数来计算和,从_i = 1开始计算,每调用一次构造函数_i++一次,一共调用n次构造函数,也就计算出1+2+……+n……原创 2023-06-21 09:36:53 · 999 阅读 · 3 评论 -
【C++】类和对象超全超详细总结(万字详解)
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。如我们平时洗衣服,按照面向过程的步骤即是:拿盆子 —>放水 —>放衣服 —>放洗衣粉 —>手搓 —>洗净拧干 —>晾衣服。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 而洗衣服如果是使用面向对象的方法:C++兼容C结构体的用法在C语言中是类型,C语言中不支持在结构体里面定义函数;在C++中把结构体升级成了类,是声明类,在结构体里面不需要加,本身就是类型,同时在C++中还支持定义函原创 2023-06-20 20:57:06 · 334 阅读 · 12 评论 -
【C++】类和对象(下)
构造函数体赋值、初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式;explicit关键字:构造函数不仅可以构造和初始化对象,对于单个参数的构造函数,还支持隐式类型转换(C++98),C++98不支持多个参数的构造函数隐式类型转换、声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化……原创 2023-06-20 19:18:49 · 357 阅读 · 21 评论 -
【C++】类和对象(中)
介绍了类的6个默认成员函数(构造函数、析构函数、拷贝构造函数以及取地址重载)的概念及特性和使用场景;运算符重载以及通过实现日期类来完成对类的默认成员函数和运算符重载的认识和熟悉,包含实现日期类的各个函数功能以及具体代码。构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有一个合适的初始值,并且在对象整个生命周期内只调用一次。无参的构造函数、全缺省的构造函数以及用户不写编译器自动生成的构造函数被称为默认构造函数。默认构造函数只能有一个,也就是说无参的构造函数和原创 2023-06-05 17:50:45 · 619 阅读 · 29 评论 -
【C++】类和对象(上)
C++类和对象上主要内容为:面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装、类的作用域、类的实例化、类对象模型和this指针……原创 2023-05-28 10:24:02 · 1322 阅读 · 17 评论 -
【C++】C++入门
C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。C++入门知识包括C++关键字、命名空间、输入和输出的使用、缺省参数、函数重载、引用、内联函数以及C++11中涉及到的auto关键字、基于范围的for循环和指针空值nullpttr……原创 2023-05-26 18:45:34 · 1048 阅读 · 29 评论