
C++经典问答
文章平均质量分 82
Fioman_Hammer
探寻事实以及事实背后发生的真相,是做成一切事情的依据!
展开
-
C++经典问题_27 STL(十一) 常用算法
文章目录一. 常用算法概述二. 常用的遍历算法① for_each 遍历容器② transform 搬运容器到另外一个容器中,并且搬运的过程中可以通过普通函数或者仿函数进行操作三. 常用的查找算法① find② find_if一. 常用算法概述算法主要由头文件<algorithm> <functional> <numeric> 组成algorithm 是所有的STL头文件中最大的一个,范围涉及到比较,交换,查找,遍历操作,复制,修改numeric 体积很小,只原创 2022-04-16 15:35:51 · 997 阅读 · 0 评论 -
C++经典问题_26 STL(十) 函数对象
文章目录一. 函数对象概念二. 一元谓词三. 二元谓词四. 内建函数对象① 概念② 分类③ 用法④ 算术仿函数⑤ 关系仿函数⑥ 逻辑运算仿函数一. 函数对象概念概念:重载函数调用操作符的类,其对象常称为函数对象.函数对象使用重载的()时,行为类似函数的调用,所以也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数特点:函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值函数对象超出了普通的函数的概念,函数对象可以有自己的状态(类属性)函数对象可以作为参原创 2022-04-15 14:07:33 · 866 阅读 · 0 评论 -
C++经典问题_25 STL(九) map/multimap 容器
文章目录一. map容器的基本概念二. map的构造和赋值三. map的大小和交换四. map的插入和删除五. map的查找和统计六.map容器排序七 案例一. map容器的基本概念map中所有的元素都是pairpair中第一个元素为key(键值),起到索引的作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序本质:map/multimap属于关联式容器,底层结构都是用二叉树实现优点:可以根据key值快速查找到value的值map和multimap的区别?原创 2022-04-15 11:16:47 · 869 阅读 · 0 评论 -
C++经典问题_24 STL(八) set/multiset 容器
文章目录一. set基本概念二. set的构造和赋值三. set的大小和交换四. set的插入和删除五. set的查找和统计六. set 和 multiset的区别七. pair对组创建八. set容器的排序一. set基本概念所有的元素在插入的时候会被自动排序set和multiset都是关联式容器,底层结构都是用二叉树实现二. set的构造和赋值set<T> s 默认构造函数set(const set& s); 拷贝构造函数set& operator=(原创 2022-04-14 18:07:16 · 544 阅读 · 0 评论 -
C++经典问题_23 STL(七) list容器
文章目录一. list的基本概念① 功能:② 链表的组成③ STL的链表是一个双向循环链表④ list的优点⑤ list的缺点二. list的构造函数三. list的赋值和交换四. list大小操作五. list的插入和删除六. list的数据存取七. list的反转和排序一. list的基本概念① 功能:将数据进行链式存储链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的② 链表的组成链表由一系列的节点组成节点的组成: 一个是存储原创 2022-04-14 17:00:22 · 679 阅读 · 0 评论 -
C++经典问题_22 STL(六) queue容器
文章目录一. queue的基本概念二. 队列的常用接口一. queue的基本概念概念queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口队列是从一端新增元素,从另外一端移除元素队列只有头部和尾部才可以被外界访问使用,因此队列也是不允许有遍历行为往队列中新增数据 – 入队: push往队列中移出数据 – 出队: pop二. 队列的常用接口构造函数queue<T> q; queue采用模板类实现,queue对象的默认构造原创 2022-04-14 09:58:27 · 136 阅读 · 0 评论 -
C++经典问题_21 STL(五) stack容器
文章目录一. stack容器的基本概念二. 栈常用的接口① 构造函数② 赋值操作③ 数据存取④ 大小操作一. stack容器的基本概念stack是一种先进后出(First in last out FILO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为入栈 : push : 放入栈顶出栈: pop: 从栈顶拿出元素栈是否为空: empty()二. 栈常用的接口① 构造函数stack<T> stk stack采用模板类实现,sta原创 2022-04-14 09:33:48 · 533 阅读 · 0 评论 -
C++经典问题_20 STL(四) deque
文章目录一. deque容器的基本概念① 功能② deque和vector的区别③ deque的内部工作原理二. deque的构造函数三. deque的赋值操作四. deque的容器大小操作五. deque插入和删除的操作六. deque的存取操作七. deque的排序一. deque容器的基本概念① 功能双端数组,可以对收尾进行插入删除操作② deque和vector的区别vector对于头部的插入删除效率低,数据量越大,效率越低.deque相对而言,对头部的插入和删除速度比vecto原创 2022-04-13 15:22:10 · 477 阅读 · 0 评论 -
C++经典问题_19 STL(三) vector
文章目录一. vector基本概念① 功能② 与普通数组的区别二. vector的构造函数三. vector赋值操作四. vector容量和大小的操作五. vector插入和删除的操作六. vector数据存取七. 容器互换八. vector的预空间一. vector基本概念① 功能vector数据结构和数组非常相似,也称为单端数组② 与普通数组的区别数组是静态空间,而vector是可以动态扩展的动态扩展动态扩展不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间原创 2022-04-13 13:46:08 · 743 阅读 · 0 评论 -
C++经典问题_18 STL(二)
文章目录一. string容器① string的基本概念② string的构造函数③ string 赋值操作二. string容器的拼接操作三. string容器的查找和替换四. string容器的字符串比较函数原型五. string字符存取六. string的插入和删除一. string容器① string的基本概念本质string是C++风格的字符串,而string本质上是一个类string和char*区别:char* 是一个指针string是一个类,类内部封装了char*,管理这原创 2022-04-13 09:33:47 · 430 阅读 · 0 评论 -
C++经典问题_17 STL(一)
文章目录一. STL概述① STL的诞生② STL的基本概念③ STL六大组件二. 容器算法迭代器① 容器概述② 算法③ 迭代器四. Vector容器① 概述② 案例③ vector中存放自定义的数据类型一. STL概述① STL的诞生长久以来,软件开发都希望可以创建一种可以重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量的重复工作为了建立数据结构和算法的一套标准,诞生了STL② STL的基本概念ST原创 2022-04-12 11:37:30 · 983 阅读 · 0 评论 -
C++经典问题_16 模板
文章目录一. 模板的概念二. 函数模板① 函数模板介绍② 函数模板语法③ 函数模板的注意事项④ 函数模板的例子三. 函数模板和普通函数的区别四. 普通函数和函数模板的调用规则五. 模板的局限性六 类模板① 类模板的作用② 语法③ 例子④ 类模板和函数模板的区别⑤ 类模板中成员函数的创建时机一. 模板的概念模板就是建立通用的工具,提高代码的复用性.模板不能直接使用,大部分的时候只是一个框架模板的通用并不是万能的二. 函数模板① 函数模板介绍C++有一种编程思想称为泛型编程,主要利用的原创 2022-04-09 15:43:34 · 1079 阅读 · 0 评论 -
C++经典问题_15 文件操作
文章目录一. 文件分类① 文本文件② 二进制文件二. 操作文件的三大类:① ofstream② ifstream③ fstream三. 写文件的操作步骤① 写文件的步骤② 文件打开的方式③ 文本方式写文件的例子四. 读文件的操作① 读文件的步骤② 读取文件的例子一. 文件分类① 文本文件文件以文本的ASCII码形式存储在计算机中② 二进制文件文件以文本的二进制的形式存储在计算机中,用户一般不能直接读懂它们.存放的都是0和1这些二进制数二. 操作文件的三大类:① ofstream写原创 2022-04-06 10:10:02 · 1009 阅读 · 0 评论 -
C++经典问题_14 多态
文章目录一. 多态的分类① 两种多态的实现方式② 静态多态和动态多态的区别二. 多态的实现方式一. 多态的分类① 两种多态的实现方式静态多态: 函数重载和运算符重载属于静态多态,复用函数名.动态多态: 派生类和虚函数实现运行时多态② 静态多态和动态多态的区别静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确定函数地址二. 多态的实现方式使用基类的引用或者指针指向子类的对象,可以调用子类的函数,就是实现通过基类指针或者引用根据指针的指原创 2022-04-03 15:05:59 · 1569 阅读 · 0 评论 -
C++经典问题_13 运算符重载
文章目录一. 运算符重载的意义二. 加号运算符(+)的重载① 函数原型一. 运算符重载的意义对于内置的数据类型,运算符是可以进行直接运算使用的.自定义的类型如果需要用到运算符的这些操作,就要自己定一个运算符的重载函数.二. 加号运算符(+)的重载① 函数原型...原创 2022-04-02 16:13:29 · 1051 阅读 · 0 评论 -
C++经典问题_12 using详解
文章目录一. 声明二. 命名空间三. 类型别名四. 改变从基类继承来的成员的访问级别.五. 函数指针别名六. 模板别名① 容器模板② 函数指针模板一. 声明声明的对象或者变量可以直接在当前的作用域内使用.语法: using 名称,例如 using std::cout/*----------------------------------------------------------------* 项目: Classical Question* 作者: Fioman* 邮箱: geym原创 2022-04-01 17:03:05 · 941 阅读 · 0 评论 -
C++经典问题_11 C++类默认创建的成员函数
文章目录一. 创建一个空类的时候编译器会自动生成哪些函数① 默认构造函数② 默认的拷贝构造函数③ 默认的析构函数④ 默认的重载赋值运算符函数⑤ 默认的重载取地址运算符函数⑥ 默认的重载取地址运算符const函数⑦ 默认移动构造函数(C++11)⑧ 默认重载移动赋值操作符函数(C++11)一. 创建一个空类的时候编译器会自动生成哪些函数① 默认构造函数② 默认的拷贝构造函数③ 默认的析构函数④ 默认的重载赋值运算符函数⑤ 默认的重载取地址运算符函数⑥ 默认的重载取地址运算符const函数⑦ 默原创 2022-04-01 14:19:25 · 1789 阅读 · 0 评论 -
C++经典问题_10 函数模板
文章目录一. 什么是函数模板① 函数模板的概述② 定义方式③ 调用方式二. 函数模板的使用注意事项① 传递的参数类型必须是同种类型,即必须推导出一致的T才可以使用② 模板的声明必须和函数的声明一对一使用,即模板声明作用域紧挨着的函数声明③ 函数模板和普通的函数一样,也可以发生重载三. 函数模板的特化① 特化的概念② 函数模板特化一. 什么是函数模板① 函数模板的概述函数模板是使用泛型来定义函数,其中的泛型可以用具体的类型来替换.通过将类型作为参数传递给模板,可以使得编译器生成该类型的函数.② 定原创 2022-03-31 17:05:55 · 171 阅读 · 0 评论 -
C++经典问题_09 函数指针
文章目录一. 函数的类型和地址二. 函数指针的定义方式① 函数指针的声明② 当我们把函数名作为一个值使用时,该函数自动转换为指针③ 函数指针在使用的时候注意事项三. 函数指针形参和返回值① 形参可以是指向函数的指针,形参看起来是函数类型,实际上却是当成指针来使用② 返回指向函数的指针四. 使用typedef 来定义函数类型以及函数指针类型一. 函数的类型和地址函数也是有类型的,函数的类型由它的返回类型和形参类型共同决定,与函数名无关.比如下面的函数的类型bool lengthCompare(cons原创 2022-03-31 14:40:48 · 708 阅读 · 0 评论 -
C++经典问题_08 函数重载和函数重写
文章目录一. 函数重载的定义二. 函数重载的条件三. 函数重载的例子一. 函数重载的定义函数重载是指在同一个作用域内 ,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样减少了函数名的数量,避免了名字空间污染,对于程序的可读性有很大的好处.二. 函数重载的条件相同作用域下.所以成员函数和全局函数不会构成函数重载函数的名称相同函数的参数列表不同(参数的个数和参数的类型)函数的返回值可以相同,也可以不同(如果参数相同,名称相同原创 2022-03-31 10:13:51 · 1421 阅读 · 0 评论 -
C++经典问题_07 C++友元机制
文章目录一. 为什么引入友元机制二. 友元的实现方式① 普通的函数作为友元② 友元函数类内定义和类外定义的细微区别?一. 为什么引入友元机制C++的类都具有封装的特性,这样在类外就没有办法访问类内封装的私有的成员.但是有些情况下,需要在类外访问私有的成员,也就是说如果其他的普通的函数或者其他的类如果要访问本类的私有成员的时候,就需要使用友元机制.友元机制允许类外的函数或者是其他的类访问本类封装的所有成员,包括私有成员.二. 友元的实现方式① 普通的函数作为友元目的使普通的函数能够访问类内的原创 2022-03-30 17:12:34 · 661 阅读 · 0 评论 -
C++经典问题_06 虚函数和纯虚函数以及多态
文章目录一. 虚函数和纯虚函数以及多态的概念二. 虚函数详解① 虚函数的定义② 虚函数和普通函数重写时候的区别③ 虚函数的常见错误④ 如何避免虚函数的使用错误三. 虚函数指针和虚函数表① 普通的成员函数和成员变量的内存分布② 当有虚函数的时候的内存分布四. 纯虚函数① 纯虚函数的定义② 为什么需要纯虚函数③ 虚函数和纯虚函数如何选择④ 构造函数和析构函数可以是虚函数吗一. 虚函数和纯虚函数以及多态的概念多态的核心就是通过基类访问派生类定义的成员函数.多态性使得程序调用的函数在运行时动态确定,而不是编原创 2022-03-26 14:41:09 · 1391 阅读 · 0 评论 -
C++经典问题_05 继承和派生
文章目录一. 继承的概念和意义二. 继承的语法以及三种继承方式① 定义的格式② 三种继承方式一. 继承的概念和意义继承是代码复用一种高效手段允许程序员保持在已经存在的类基础上进行扩展,添加新功能,定义新属性继承表示的是一种is-a的关系继承类和被继承类表示的是一种父子关系,其中被继承的类称为基类或者父类,继承的类称为子类或者派生类.二. 继承的语法以及三种继承方式① 定义的格式class Derived:public Base1,public Base2,public Base3{原创 2022-03-25 17:46:23 · 1350 阅读 · 0 评论 -
C++经典问题_04 静态成员和this指针
文章目录一. 静态成员① 静态成员变量② 静态成员函数二. 成员变量和成员函数分开存储① 空对象占用字节的大小② 成员函数和变量分开存储一. 静态成员① 静态成员变量静态成员变量就是普通的成员变量前面加上static关键字就是静态成员变量.所有的对象共享同一份静态成员变量.在编译阶段分配内存,存储在全局数据区在类内声明,类外初始化,需要在类外单独分配空间.生命周期不依赖任何的对象,为程序的整个生命周期.即可以通过对象来访问,也可以通过类名来访问/*-----------------原创 2022-03-25 14:08:57 · 5867 阅读 · 0 评论 -
C++经典问题_03 const的用法总结
文章目录一. 什么是const变量二. 引入const的目的三. const的主要作用① 定义const常量,可以重复使用以及不可变性.② 便于进行类型检查,使得编译器对内容具有更好的可控性,防止错误发生.③ 可以取代一些固定的多次使用的常数,方便的进行参数的调整和修改④一. 什么是const变量const关键字是一个类型修饰符,起到一种提示的作用,在编译器编译的过程中,告诉编译器这个变量具有只读的特点,一旦程序试图去修改它,编译器就会给出错误的提示.const变量是不更改的意思(有一些办法也是可以更原创 2022-03-24 15:31:16 · 531 阅读 · 0 评论 -
C++经典问题_02 构造函数和析构函数的调用顺序
文章目录一. 构造函数二. 析构函数三. 构造函数的调用顺序四. 析构函数的调用顺序五. 特例① 一般的没有静态成员的时候的构造和析构顺序.② 静态对象成员在什么时候调用构造函数一. 构造函数构造函数没有返回值当用户没有定义构造函数时,系统会自动提供一个无参构造,初始化对象的值为空或者0或者是垃圾值创建一个对象的时候,系统会自动创建构造函数./*----------------------------------------------------------------* 项目: Cl原创 2022-03-23 17:15:00 · 616 阅读 · 0 评论 -
C++经典问题_01 C++构造函数和析构函数
文章目录一. 构造函数的作用二.构造函数的分类三.拷贝构造函数四. 浅拷贝和深拷贝何为浅拷贝哪些情况下会执行浅拷贝浅拷贝引发的问题何为深拷贝一. 构造函数的作用当一个类对象在被创建的时候,编译系统对象分配内存空间,并且自动调用构造函数,由构造函数完成成员的初始化工作.所以构造函数的作用一般是用来初始化对象的数据成员.如果代码里没有显示的定义构造函数,则编译器会自动创建默认的构造函数,以及默认的拷贝构造函数.默认的构造函数就是一个空实现,默认的拷贝构造函数是简单的属性赋值操作如果显示的定义了构造原创 2022-03-22 17:12:12 · 417 阅读 · 0 评论