
C++学习最全宝典(强烈建议订阅)
包含C++基础到进阶的整套学习资料,新手可按照顺序学习C++的整套知识,代码可读性强
Sonal_Lynn
深耕AI领域,专注技术创新。发表多篇顶会论文,授权国家发明专利及软著,主持国家级大创/攀登计划,推动AI算法从实验室走向产业应用,赋能行业变革。
展开
-
C++ 提高编程篇5.6:常用集合算法
掌握常用的集合算法。原创 2024-01-28 16:15:55 · 347 阅读 · 0 评论 -
C++ 提高编程篇5.5:常用算数生成算法
掌握常用的算数生成算法注意:算数生成算法属于小型算法,使用时包含的头文件为 #inlcude<numeric>原创 2024-01-28 15:51:22 · 288 阅读 · 0 评论 -
C++ 提高编程篇5.4:常用拷贝和替换算法
掌握常用的拷贝和替换算法。原创 2024-01-28 15:39:18 · 288 阅读 · 0 评论 -
C++ 提高编程篇5.3:常用排序算法
掌握常用的排序算法。原创 2024-01-28 02:28:26 · 590 阅读 · 0 评论 -
C++ 提高编程篇5.2:常用查找算法
掌握常用的查找算法算法简介:find —— 查找元素find_if —— 按条件查找元素adjacent_find —— 查找相邻重复元素binary_search —— 统计元素个数count_if —— 按条件统计元素个数。原创 2024-01-28 01:56:12 · 338 阅读 · 0 评论 -
C++ 提高编程篇5.1:常用遍历算法
算法主要是由头文件<algorithm> <functional> <numeric> 组成<algorithm>是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改等等<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数<functional>定义了一些模板类,用以声明函数对象掌握最常用的遍历算法。原创 2024-01-26 17:05:48 · 355 阅读 · 0 评论 -
C++ 提高编程篇4.3:内建函数对象
STL内建了一些函数对象分类:1. 算数仿函数2. 关系仿函数3. 逻辑仿函数用法:这些仿函数所产生的对象,用法和一般函数完全相同使用内建函数对象,需要引入头文件 #include<functional>原创 2024-01-26 16:41:07 · 290 阅读 · 0 评论 -
C++ 提高编程篇4.2:谓词
返回bool类型的仿函数被称为谓词如果operator()接受一个参数,那么叫做一元谓词如果operator()接受两个参数,那么叫做二元谓词。原创 2024-01-26 16:12:29 · 243 阅读 · 0 评论 -
C++ 提高编程篇4.1:函数对象(仿函数)
1. 函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值。2. 函数对象超出普通函数的概念,函数对象可以有自己的状态。函数对象使用重载的()时,行为类似函数调用,也叫仿函数。本质:函数对象(仿函数)是一个类,不是一个函数。重载函数调用操作符的类,其对象常称为函数对象。3. 函数对象可以作为参数传递。原创 2024-01-26 14:41:25 · 309 阅读 · 0 评论 -
C++ 提高编程篇3.10:容器练习之员工分组
公司今天招聘了10个员工(ABCDEFGHIJ),10名员工进行公司之后,需要指派员工在哪个部门工作员工信息有:姓名 工资组成;部门划分:策划、美术、研发随机给10名员工分配部门和工资通过multimap进行信息的插入 key(部门编号)value(员工)分部门显示员工信息。原创 2024-01-25 23:59:43 · 354 阅读 · 0 评论 -
C++ 提高编程篇3.9:map/multimap 容器
pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)功能:map容器默认排序规则为 按照key值进行从小到大排,自我如何改变排序规则。本质:map/multimap属于关联式容器,底层结构是用二叉树实现。总结:map中所有元素都是成对出现,插入数据时候要使用对组。对于自定义数据类型,map必须要指定排序规则,同set容器。统计 —— count(对于map,结果为0或者1)功能:统计map容器大小以及交换map容器。功能:map容器进行插入数据和删除数据。原创 2024-01-25 23:31:24 · 515 阅读 · 0 评论 -
C++ 提高编程篇3.8:set/multiset 容器
本质:set/multiset容器属于关联式容器,底层结构是用二叉树实现。3. multiset不会检测数据,因此可以插入重复数据。1. set不可以插入重复数据,而multiset可以。功能:成对出现的数据,利用对组可以返回两个数据。如果需要插入重复数据可以利用multiset。功能:统计set容器大小以及交换set容器。功能:对set容器进行查找数据以及统计数据。功能:set容器进行插入数据和删除数据。如果不允许插入重复数据可以利用set。set容器插入数据的数据会自动排序。原创 2024-01-24 01:40:03 · 786 阅读 · 0 评论 -
C++ 提高编程篇3.7:list容器
2. list有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。总结:STL中list和vector是两个最常被使用的容器,各有优缺点。功能:将容器中的元素反转,以及将容器中的数据进行升序。原创 2024-01-23 20:28:15 · 730 阅读 · 0 评论 -
C++ 提高编程篇3.6:queue容器
定义:queue是一种先进先出的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为 —— 入队 push队列中出数据称为 —— 出队 pop。原创 2024-01-21 18:15:08 · 506 阅读 · 0 评论 -
C++ 提高编程篇3.5:stack容器
概念:stack是一种先进后出的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界访问,因此栈不允许有遍历行为栈中进入数据称为 —— 入栈 push栈中弹出数据称为 —— 出栈 pop。原创 2024-01-20 18:08:15 · 408 阅读 · 0 评论 -
C++ 提高编程篇3.4:容器练习之评委打分
2. 遍历vector容器,取出来每一个选手,执行for循环,可以把10个评委打分存到deque容器中。有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。3. sort算法对deque容器中分数排序,去除最高和最低分。1. 创建五名选手,放入vector中。4. deque容器遍历一遍,累加总分。原创 2024-01-20 15:18:31 · 411 阅读 · 0 评论 -
C++ 提高编程篇3.3:deque容器
deque内部有个中控器,维护每段缓冲区中的内容,缓冲区存放真实数据中控器维护的是每个缓冲区的地址,使得使用deque时像是一片连续的内存空间。3. vector访问元素时的速度会比deque快,这和两者内部实现相关。总结:deque容器和vector容器的构造方式几乎一致,灵活使用即可。1. vector对于头部的插入和删除效率低,数目量越大,效率越低。功能:对deque容器的大小进行操作。功能:对deque中的数据的存取操作。头插 —— push_front。尾插 —— push_back。原创 2024-01-20 01:07:20 · 592 阅读 · 0 评论 -
C++ 提高编程篇3.2:vector容器
vector数据结构与数组非常相似,也称为单端数组:不同之处在于数组是静态空间,而vector可以动态拓展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector容器的迭代器是支持随机访问的迭代器。原创 2024-01-18 15:29:01 · 588 阅读 · 0 评论 -
C++ 提高编程篇3.1:string容器
本质:string是C++风格的字符串,而string本质是一个类string和char *区别1. char * 是一个指针2. string是一个类,类内部封装了char*,管理这个字符串,是一个char*型容器特点:string类内部封装了很多成员方法例如:查找find、拷贝copy、删除delete替换replace,插入insertstring管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。原创 2024-01-15 23:28:08 · 418 阅读 · 0 评论 -
C++ 提高编程篇2:STL初识
vector中存放自定义数据类型,并打印输出#include // 标准算法头文件// vector 容器存放自定义数据类型public:int m_Age;// 向容器中添加数据// 遍历容器中的数据it!= v.end();it++)//cout原创 2024-01-15 15:09:03 · 1086 阅读 · 0 评论 -
C++ 提高编程篇1.2:类模板
2. 解决方式2:将声明和实现写到同一个文件中,并更改后缀名.hpp,hpp时约定的名称,并不是强制。类模板作用:建立一个通用类,类中的成员 数据类型可以不具体确定,用一个虚拟的类型代表。1. 当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型。主流的解决方式时第二种,将类模板成员函数写到一起,并将后缀改为.hpp。总结:类模板中的成员并不是一开始就创建的,在调用时才去创建。总结:如果父类是类模板,子类需要指定出父类中T的数据类型。1. 指定传入的类型 —— 直接显示对象的数据类型。原创 2024-01-15 13:20:31 · 635 阅读 · 0 评论 -
C++ 提高编程篇1.1:函数模板
建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表。总结:建议使用显示指定类型的方式,调用函数模板,因为可以自动确定通用类型T。1. 利用函数模板封装出一个排序的函数,可以对不同数据类型数组进行排序。2. 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换。1. 自动类型推导,必须推导出一致的数据类型T,才可以使用。3. 如果利用显式指定类型的方式,可以发生隐式类型转换。1. 利用具体化的模板,可以解决自定义类型的通用化。2. 排序规则从大到小,排序算法为选择排序。原创 2024-01-14 21:57:26 · 492 阅读 · 0 评论 -
C++ 核心编程篇综合练习:职工管理系统
职工管理系统可以用来管理公司内所有员工的信息本练习主要利用C++来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号,职工姓名,职工岗位,以及职责普通员工职责:完成经理交给的任务经理职责:完成老板交给的任务,并下发任务给员工老板职责:管理公司所有事物管理系统中需要实现的功能如下:1. 退出管理程序:退出当前管理系统2. 增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号。原创 2024-01-13 23:30:41 · 2305 阅读 · 0 评论 -
C++ 核心编程篇5.2:二进制文件
以二进制的方式对文件进行读写操作打开方式要指定为 ios::binary。原创 2024-01-12 14:43:52 · 461 阅读 · 0 评论 -
C++ 核心编程篇5.1:文本文件
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化C++中对文件操作需要包含头文件 文件类型分为两种:1. 文本文件:文件以文本的ASCII码形式存储在计算机中2. 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们操作文件的三大类:1. ofstream:写操作2. ifstream:读操作3. fstream:读写操作。原创 2024-01-12 14:07:46 · 425 阅读 · 0 评论 -
C++ 核心编程篇4.7:多态
多态分为两类1. 静态多态:函数重载 和 运算符重载属于静态多态,复用函数名2. 动态多态:派生类和虚函数实现运行时多态静态多态和动态多态区别:1. 静态多态的函数地址早绑定- 编译阶段确定函数地址2. 动态多态的函数地址晚绑定- 运行阶段确定函数地址结:多态满足条件:1. 有继承关系2. 子类重写父类中的虚函数多态使用条件:父类指针或引用指向子类对象重写:函数返回值类型 函数名 参数列表 完全一致称为重写。原创 2024-01-12 12:23:56 · 1234 阅读 · 0 评论 -
C++ 核心编程篇4.6:继承
继承的好处:可以减少重复的代码A类称为子类 或 派生类B类称为父类 或 基类派生类中的成员,包含两大部分一类是从基类继承过来的,一类是自己增加的成员从基类继承过来的表现其共性,而新增的成员体现了其个性。原创 2024-01-11 22:16:57 · 435 阅读 · 0 评论 -
C++ 核心编程篇4.5:运算符重载
加号运算符重载作用:实现两个自定义数据类型相加的运算总结:1. 对于内置的数据类型的表达式的运算符是不可能改的2. 不要滥用运算符重载。原创 2024-01-11 18:48:51 · 561 阅读 · 0 评论 -
C++ 核心编程篇4.4:友元
在程序中,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的是让一个函数或者类访问另一个类中私有成员友元的关键字:friend友元的三种实现1. 全局函数做友元2. 类做友元3. 成员函数做友元。原创 2024-01-11 00:26:19 · 383 阅读 · 0 评论 -
C++ 核心编程篇4.3:C++对象模型和this指针
在C++中,类内成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上。原创 2024-01-10 21:52:13 · 443 阅读 · 0 评论 -
C++ 核心编程篇4.2:对象的初始化和清理
生活中我们买的电子产品基本有还原出厂设置,在某一天我们不用时候也会删除一些自己信息数据来保证安全C++中的面向对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置构造函数和析构函数的作用:对象的初始化和清零是非常重要的安全问题,一个对象或者变量没有初始状态,对其使用后果是未知,同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题C++利用构造函数和析构函数解决上述问题,这些函数将会被编译器自动调用,完成对象初始化和清理工作。原创 2024-01-10 15:54:01 · 953 阅读 · 0 评论 -
C++ 核心编程篇4.1:封装
封装是C++面向对象的三大特性之一封装的意义:1. 将属性和行为作为一个整体,表现生活中的事物2. 将属性和行为加以权限控制封装意义之一:在设计类的时候,属性和行为写在一起,表现事物语法:class 类名{ 访问权限:属性 / 行为 };示例1:设计一个圆类,求圆的周长示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号类在设计时,可以把属性和行为放在不同的权限,加以控制访问权限有三种:1. public 公共权限2. protected 保护权限。原创 2024-01-08 18:32:57 · 414 阅读 · 0 评论 -
C++ 核心编程篇3.3:函数重载
3. 函数参数类型不同,或者个数不同,或者顺序不同。注意事项:函数的返回值不可以作为函数重载的条件。函数重载作用:函数名相同,提高复用性。1. 同一个作用域下。原创 2024-01-08 16:20:45 · 541 阅读 · 0 评论 -
C++ 核心编程篇3.2:函数占位参数
C++中函数的形参列表可以有占位参数,用来做占位,调用函数时必须填补该位置。语法:返回值类型 函数名 {数据类型} {}原创 2024-01-08 16:07:35 · 411 阅读 · 0 评论 -
C++ 核心编程篇3.1:函数默认参数
在C++中,函数的形参列表中的形参是可以有默认值的语法:返回值类型 函数名 (参数 = 默认值){ }#include<iostream>using namespace std;// 函数默认参数// 如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值// 语法:返回值类型 函数名(形参 = 默认值){}int func(int a, int b = 20, int c = 30){ return a + b + c;}// 注意事项//原创 2024-01-08 15:55:46 · 395 阅读 · 0 评论 -
C++ 核心编程篇2.6:常量引用
在函数形参列表中,可以加const修饰形参,防止形参改变实参。常量引用作用:主要用来修饰形参,防止误操作。原创 2024-01-07 23:14:07 · 395 阅读 · 0 评论 -
C++ 核心编程篇2.5:引用的本质
总结:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了。引用的本质:在C++内部实现是一个指针常量。原创 2024-01-07 23:04:35 · 403 阅读 · 0 评论 -
C++ 核心编程篇2.4:引用做函数返回值
引用做函数返回值作用:引用是可以作为函数的返回值存在的。注意事项:不要返回局部变量引用。用法:函数调用作为左值。原创 2024-01-07 22:52:52 · 401 阅读 · 0 评论 -
C++ 核心编程篇2.3:引用做函数参数
总结:通过引用参数产生的效果同按地址传递是一样的,引用语法更清楚简单。引用做函数参数作用:函数传参时,可以利用引用的技术让形参修饰实参。优点:可以简化指针修改实参。原创 2024-01-07 18:31:13 · 432 阅读 · 0 评论 -
C++ 核心编程篇2.2:引用注意事项
2. 引用在初始化后,不可以改变。1. 引用必须初始化。原创 2024-01-07 18:18:32 · 389 阅读 · 0 评论