
C++核心语法
文章平均质量分 84
C++语法知识整理
孙同学要努力
这个作者很懒,什么都没留下…
展开
-
C++知识整理day12——set容器和map容器
我们先了解一下什么是序列式容器和关联式容器:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间⼀般没有紧密的关联关系,⽐如交换⼀下,他依旧是序列式容器。顺序容器中的元素是按他们在容器中的存储位置来顺序保存和访问的。关联式容器也是⽤来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是⾮线性结构,两个位置有紧密的关联关系,交换⼀下,他的存储结构就被破坏了。原创 2025-03-07 21:35:55 · 920 阅读 · 0 评论 -
C++知识整理day11——二叉搜索树(二叉搜索树的插入、查找、删除及完整代码实现)
二叉搜索树又称为二叉排序树,为什么这么说呢,我们学过就知道,对二叉搜索树进行一遍中序遍历,就会实现排序的功能。这里先声明一下,对于二叉搜索树,“改”是没有必要的,而且改完数据再恢复到二叉搜索树很难设计,因此我们只会实现增、删、查。当然,朴素的二叉搜索树在项目中是很少使用的,之后我们会看到他们的变种,如AVL树、红黑树。删除的过程最为复杂,首先我们要确定这个值在书中存在不存在,不存在我们直接返回false。例如,我们还是给如上的例子,我们想插入4怎么实现呢?综合来说,二叉搜索树的增删查的时间复杂度为O(N)原创 2025-03-05 22:48:51 · 1073 阅读 · 0 评论 -
C++知识整理day10——多态(多态的定义和实现、虚函数重写/覆盖、override和final关键字、纯虚函数和抽象类、多态的原理)
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了Person。Person对象买票全价,Student对象优惠买票。原创 2025-02-27 22:56:51 · 914 阅读 · 0 评论 -
C++知识整理day9——继承(基类与派生类之间的转换、派生类的默认成员函数、多继承问题)
继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类或子类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复⽤,继承是类设计层次的复⽤。原创 2025-02-25 22:30:23 · 681 阅读 · 0 评论 -
C++知识整理day8——模版--一篇完整版搞定模板问题(函数模板、类模板、模板特化)
上述示例中,p1指向的d1显然小于p2指向的d2对象,但是Less内部并没有比较p1和p2指向的对象内容,而比较的是p1和p2指针的地址,这就无法达到预期而错误。A:泛型编程就类似于生活中的印刷术一样,有一个模具,我们需要印刷哪一本书,就会有对应的模具,我们不需要来一页纸,就重新写字,我们只需要找到这页纸的模具就可以了。通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理,比如:实现了一个专门用来进行小于比较的函数模板。原创 2025-02-22 14:28:17 · 724 阅读 · 0 评论 -
C++知识整理day7容器——stack和queue容器(包括deque容器、priority_queue容器)
我们可以看到,在我们之前学的容器中,例如vector,里面调的都是内存池,而stack和queue里面都是一个容器适配器。Q:什么是适配器?A:适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。例如:Q:为什么还要有deque这种容器?A:首先,deque是双带你队列,它允许两端都可以插入和删除元素。原创 2025-02-06 21:24:13 · 633 阅读 · 0 评论 -
C++知识整理day6容器——vector容器
在上一节中,我们主要学习了string容器的常见操作,当然对于模拟实现string类还没有更新,我会在之后进行更新,先把这几个容器的常见操作学了,方便后面的算法。注意:对于insert和erase操作,他不像string类那样,可以通过下标找到要修改的位置,vector类是不支持的。一般我们都是通过迭代器的指向来找到要修改的位置的,迭代器是可以加数字的,从而变相的实现。,之后对于容器的操作常见接口就不会那么详细的说明了,用法都是大致一样的。容器的迭代器都是一样的,可以参考上篇string类的迭代器。原创 2025-02-06 21:23:41 · 325 阅读 · 0 评论 -
C++知识整理day5容器——string容器
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL的六大组件:我们之前在数据结构阶段学了很多,包括顺序表、链表、栈、队列、二叉树等等;在之后我们在做算法题时,需要用到哪个数据结构,靠我们手写是不太现实的,C++帮我们封装了很多的容器,本质上他们都是给我们实现好的一个个类,我们直接使用即可。当然我们也要学习他的底层,这是很重要的。本节我们先来学习一下string类。原创 2024-12-10 16:01:12 · 978 阅读 · 0 评论 -
C++知识整理day4内存管理——new和delete详解
int main()// new/delete 和 malloc/free最大区别是// new/delete对于【自定义类型】除了开空间//还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;原创 2024-12-06 18:50:54 · 872 阅读 · 0 评论 -
C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static
赋值运算符重载是六个默认成员函数之一,在讲解这个我们要先了解一下运算符重载。当运算符被用于类类型的对象时,C++语言允许我们通过运算符重载的形式指定新的含义。C++规定类类型对象使用运算符的时候,必须转换成调用对应运算符重载,若没有对应的运算符重载,则会报编译错误。注意:对于下面的例子中,都是使用的Date类。运算符重载是具有特别名字的函数,他的名字是由operator和后面要定义的运算符共同构成。和其他函数一样,他也具有其返回类型和参数列表以及函数体。重载运算符函数的参数个数和该运算符作⽤的运算对象原创 2024-12-03 19:22:22 · 1106 阅读 · 0 评论 -
C++知识整理day2类与对象(上)——类的定义、实例化、this指针、构造、析构、拷贝构造函数
class为定义类的关键字,Stu为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略(与结构体struct一样)。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,每个地方要求都不一样。原创 2024-11-24 21:08:30 · 691 阅读 · 0 评论 -
C++知识整理day1——前置基础知识整理(命名空间、输入输出、函数重载、引用)
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。原创 2024-11-22 20:58:22 · 1050 阅读 · 0 评论 -
c++语法欠缺地方(持续更新)
自己在刷题过程中遇到c++知识点欠缺的地方原创 2022-12-31 16:28:06 · 1009 阅读 · 1 评论 -
【STL】常见拷贝算法、替换算法、算数生成算法、集合算法
注意:算法生成算法属于小型算法,头文件为 #include《numeric》注意:利用copy算法进行拷贝的时候,目标容器记得提前开辟好空间。原创 2022-09-13 18:22:37 · 432 阅读 · 0 评论 -
【STL】常见遍历算法、查找算法、排序算法
STL常用算法主要是由头文件《algorithm》、《functional》、《numeric》组成《algorithm》是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历、赋值、修改等等《numeric》体积较小,只包括几个在序列上面进行简单数学运算的模板函数《functional》定义了一些模板类,用来声明函数对象(仿函数)原创 2022-09-12 16:41:21 · 1131 阅读 · 0 评论 -
【STL】函数对象(仿函数)谓词 内建函数对象
如果operator()接受一个参数,那么就叫做一元谓词。如果operator()接受两个参数,那么就叫做二元谓词。函数对象使用重载()时,行为类似函数调用,也称为。本质:函数对象(仿函数)是一个类,不是一个函数。仿函数写法非常灵活,可以作为参数进行传递。的类,其对象常称为函数对象。原创 2022-09-08 16:16:41 · 207 阅读 · 0 评论 -
【STL】map/multimap容器
map容器默认排序规则为 按照key值进行 从小到大排序,掌握如何改变排序规则。注意:记得在仿函数后面加const,不然会报错。原创 2022-09-03 18:08:59 · 423 阅读 · 0 评论 -
【STL】set/multiset容器
public ://按照年龄降序 return p1 . m_age > p2 . m_age;} };//创建对象 Person p1("张三" , 18);Person p2("李四" , 20);Person p3("王五" , 30);Person p4("老六" , 12);Person p5("老八" , 15);it!++ it) {原创 2022-09-02 17:37:46 · 537 阅读 · 0 评论 -
【STL】list容器
list有一个很重要的性质,插入操作和删除操作,都不会造成原有list迭代器的实效,这在vector是不成立的。(list)是一种在物理存储单元上不连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。案例描述:将Person自定义数据类型进行排序,Person中的属性有姓名、年龄和身高。由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器。总结:STL中list和vector是两个最常用的容器,各有优缺点。节点的组成:一个存储数据元素的。链表的组成:一系列的。...原创 2022-08-29 11:30:50 · 138 阅读 · 0 评论 -
【STL】stack容器和queue容器
stack容器是一种先进后出(First in Last out,FILO)的数据结构,它只有一个出口。栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为。queue容器是一种先进先出(First in First out,FIFO)的数据结构,它有两个出口。队列中只有队头和队尾才可以被外界使用,所以队列也是不允许有遍历行为的。栈中进入数据的操作称为——入栈 push。栈中弹出数据的操作称为——出栈 pop。队列中进数据操作称为——入队 push。队列中出数据操作称为——出队 pop。...原创 2022-08-27 18:25:46 · 343 阅读 · 0 评论 -
【STL】deque容器
deque容器内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真是数据。中控器维护的是每个缓冲区的地址,使得使用deque时向一片连续的内存空间。切记:sort()算法非常实用,但切记使用时。...原创 2022-08-27 17:34:34 · 83 阅读 · 0 评论 -
【STL】vector容器
总结:swap可以使两个容器互换,可以达到实用的收缩内存效果。总结:如果数据量较大,可以一开始利用reserve预留空间。迭代器:vector::iterator。互换容器的用途-》收缩内存。算法:for_each。原创 2022-08-26 17:07:33 · 159 阅读 · 0 评论 -
【STL】string容器
长久以来,软件界一直希望建立一种可重复利用的东西。C++的面向对象和泛型编程思想,目的就是提高复用性。大多情况下,数据结构和算法都没能有一套标准,导致被迫从事大量重复工作。为了建立数据结构和算法的一套标准,诞生了STL。STL(Standard Template Library,标准模板库)STL从广义上分为:容器(container)、算法(algorithm)、迭代器(iterator)容器和算法之间通过迭代器进行无缝连接STL几乎所以的代码都采用了模板类或者仿函数。原创 2022-08-24 18:30:34 · 938 阅读 · 0 评论 -
文件操作——C++
函数模型:字节指针buffer指向内存中一段存储空间,len是读写的字节数。参数讲解:字符指针buffer指向内存中一段存储空间,len是读写的字节数。例如:用二进制的方式写文件 ios::binary | ios::out。二进制方式写文件主要利用流对象调用成员函数write。二进制方式读文件主要利用流对象调用成员函数read。注意:文件打开方式可以配合使用,利用 | 操作符。读文件与写文件的步骤相似,但是读文件的方式较多。打开方式指定为:ios::binary。以二进制的方式对文件进行读写操作。...原创 2022-08-09 15:28:25 · 654 阅读 · 0 评论 -
类与对象(二)——超详细代码讲解
如果,我们没有学过继承的语法,那么我们就可能把每个类都加上头部、底部、左侧列表和中心内容,而我们要是学过继承的语法后,就可以在每个类中只写中心部分就可以了。有些类与类之间存在特殊的关系,我们在定义某些类时,下级别的成员出了拥有上一级的共性,还有自己的特性。例如我们看到很多网站中,都有公共的头部,公共的底部,公共的左侧列表,只有中心内容不同。问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?派生类中的成员,包含两部分:一类是自己增加的成员,一类是从基类继承过来的。...原创 2022-08-08 15:49:40 · 853 阅读 · 0 评论 -
类与对象(一)代码讲解
例如:人可以作为对象,对象人的属性有姓名、年龄、身高等,行为有唱、跳、rap、篮球等等。生活中家里有客厅,有卧室,客厅是所有客人都可以进去,而卧室是私有的,只能自己进去。但是,你可以允许你的好朋友好闺蜜进去。生活中,我们买的电子产品基本上都会有出厂设置,在某一天我们不用的时候也会删除一些自己信息数据保证安全。对象的初始化和清理工作是编译器强制要我们做的事情,因此如果我们不提供构造函数和析构函数,编译器会。示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号。...原创 2022-08-02 18:10:04 · 602 阅读 · 0 评论 -
函数提高(函数默认参数、占位参数、函数重载)
作用函数名相同,提高了复用性同一个作用域下函数名称相同函数参数的类型不同或者个数不同或者顺序不同**注意**函数的返回值不可以作为函数重载的条件//函数重载需要函数在同一个作用域下voidfunc(){cout...原创 2022-07-29 15:10:21 · 216 阅读 · 0 评论 -
C++中的“指针”?引用的用法
在学习C的过程中,指针一直是令人比较头疼的问题,那么,我们用什么语法可以简化指针呢?在C++中,就发明出来了引用这一个比较重要的语法,可以很好地解决传值还是传地址问题了。C++推荐使用引用技术,因为方便简单快捷,引用本质是指针常量,但是所有的指针操作都是编译器帮我们做好了的。通过引用参数产生的效果和用指针的地址传递的效果是一样的,但是引用的语法更简单明了。作用常量引用主要用来修饰实参,,防止误操作。作用函数传参时,可以利用引用的方法让形参修饰实参。作用引用是可以作为函数的返回值存在的。...原创 2022-07-29 14:38:47 · 93 阅读 · 0 评论 -
new 操作符
C++中是利用操作符在堆区开辟数据堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符,切记使用完不用的时候,记得释放。原创 2022-07-28 17:32:19 · 190 阅读 · 0 评论