C++
文章平均质量分 63
JoengGaap
这个作者很懒,什么都没留下…
展开
-
STL中遇到的一些知识点(algo)
不同的函数对不同类型的迭代器可能有不同的函数表达,需要重载,在程序运行时决定函数调用,显然效率不彰,最好能够让编译器在程序编译的时候决定函数调用,于是,我们要想方设法利用函数重载,让编译器帮助我们决策函数调用。为了提高效率,iterator_category是按照迭代器的移动特性和能够在该迭代器上实施的操作对迭代器进行分类,之所以这样做,完全是为了效率的考量。双向迭代器具有正向迭代器的全部功能,除此之外,假设 p 是一个双向迭代器,则还可以进行 --p 或者 p-- 操作(即一次向后移动一个位置)。原创 2023-02-08 16:43:57 · 315 阅读 · 0 评论 -
迭代器Iterator
迭代器模式使得改变遍历算法变得很容易: 仅需用一个不同的迭代器的实例代替原先的实例即可,你也可以自己定义迭代器的子类以支持新的遍历,或者可以在遍历中增加一些逻辑,如有条件的遍历等。除了数组以外,在大部分的容器中都会提供成员函数beget()(在类中创建,类是C++中对于C语言中的结构体的延伸),用来获取容器开始位置的迭代器,会提供成员函数end(),用来获取容器结束位置的迭代器。2)迭代器简化了聚合的接口. 有了迭代器的遍历接口,聚合本身就不再需要类似的遍历接口了,这样就简化了聚合的接口。原创 2023-02-02 21:28:19 · 1424 阅读 · 0 评论 -
C++ primer第十八章课后练习
【代码】C++ primer第十八章课后练习。原创 2022-09-26 21:26:41 · 102 阅读 · 0 评论 -
C++ 第18章 探讨C++新标准
long long、unsigned long long、char16_t、char32_t、原始字符串(所见即所得,字符串前加R前缀,字符串首尾加上小括号R"(string)")初始化列表语法可防止缩窄,即禁止将数值赋给无法存储它的数值变量,禁止将值存储到比它“窄”的变量中,但是允许转换为更宽的类型。另外,只要值在较窄类型的取值范围内,将其转换为较窄的类型也是允许的(数值需要在取值范围内)**std::initialiizer_list:**可将其作为构造函数的参数。原创 2022-09-26 20:57:53 · 618 阅读 · 0 评论 -
C++ primer 第十七章课后练习
【代码】C++ primer 第十七章课后练习。原创 2022-09-21 22:54:39 · 406 阅读 · 0 评论 -
C++ 第17章 输入、输出和文件(iostream/ostream/fstream)
C++程序把输入和输出看作字节流。输入时,程序从输入流中抽取字节;输出时,程序将字节插入到输出流中。流充当流程序和流源(输入:键盘、文件、存储设备、其他程序)或流目标(输出:屏幕、打印机、存储设备、其他程序)之间的桥梁,C++程序只是检查字节流,而不需要知道字节来自何方去向何处。缓冲区是用作中介的内存块,它是将信息从设备传输到程序或从程序传输到设备的临时存储工具。通过使用缓冲区可以更高效地处理输入和输出,因为从内存中读取单个字节往往比从从设备中读取单个字节快的多,可以先将大量数据填满缓冲区。原创 2022-09-20 23:36:25 · 2097 阅读 · 0 评论 -
C++ primer 第十六章课后练习
【代码】C++ primer 第十六章课后练习。原创 2022-09-19 22:19:58 · 305 阅读 · 0 评论 -
C++第16章 string类和标准模版库(智能指针、STL、迭代器)
序列中的元素具有确定的顺序,其元素按严格的线性顺序排列,即存在第一个元素、最后一个元素,除第一个元素和最后一个元素外,每个元素前后都分别有一个元素(deque/forward_list/list/queue/priority_queue/stack/vector)独占的智能指针unique_ptr:是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr。list:双向链表。原创 2022-09-14 22:44:06 · 386 阅读 · 0 评论 -
C++ primer 第十五章课后练习
【代码】C++ primer 第十五章课后练习。原创 2022-09-06 23:11:56 · 125 阅读 · 0 评论 -
C++第15章 友元、异常和其他(友元类方法、嵌套类、try、catch)
return 为返回,每个函数调用另一个函数,都会将被调函数的指令地址存于主调函数的栈中,函数层层调用,栈也层层叠加,在return时,当前函数返回给上级函数,直至上级函数return才返回给上上级函数,同时return的函数栈释放,以此类推。通常,引发异常的函数将传递一个对象,可以使用不同的异常类型来区分不同的函数在不同情况下引发的异常,另外,对象携带的信息可以让程序员确定引发异常的原因。(不能先声明友元类,再把友元类放到原始类后面,另外,友元类的声明只包含方法声明,实际的方法定义应放在原始类之后)原创 2022-09-05 23:27:34 · 347 阅读 · 0 评论 -
C++ primer第14章课后练习
(6):编译器将会报错,抽象基类不能进行实例化,但可以使用抽象基类的指针来访问派生出来的多个不同类。(1):因为没有使用new进行动态内存分配因此使用的是隐式赋值运算符。(4):没有新增的数据成员,继承过来的数据成员需用基类方法间接访问。(3):使得从多个类(基类相同)派生出的对象只继承1个基类对象。(5):因为只访问对象中的3个数据部分,其余部分未进行访问。(2):在派生类中进行了再次定义,所以声明为虚函数。原创 2022-09-02 17:09:24 · 208 阅读 · 0 评论 -
第14章 C++中的代码重用(has-a关系,valarry,类模版)
这意味着基类方法将不会成为派生对象公有接口的一部分,但可以在派生类的成员函数中使用它们(和被包含的对象成员用法一样,都是has-a的关系)。如果基类是虚基类,派生类将包含基类的一个子对象,如果基类不是虚基类,派生类将包含多个子对象。当类通过多条虚途径和非虚途径继承某个特定的基类时,该类将包含一个表示所有的虚途径的基类子对象和分别表示各条非虚途径的多基类子对象。将派生类对象的地址赋给基类指针,这种赋值将把基类指针设置为派生对象中基类对象的地址,但是多重继承中有多个基类对象,应使用类型转换来指定对象。...原创 2022-08-31 23:34:51 · 341 阅读 · 0 评论 -
C++ primer 第十三章课后练习
【代码】C++ primer 第十三章课后练习。原创 2022-08-29 23:30:30 · 375 阅读 · 0 评论 -
第13章 类继承
简言之,ABC描述的是至少使用一个纯虚函数的接口,从ABC派生出的类将根据派生类的具体特征,使用常规虚函数来实现这种接口。如果重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型是基类引用或指针,则可以修改为指向派生类的引用或指针,这种特性被称为返回类型协变。多态:同一个方法在派生类和基类的行为是不同的,也就是说方法的行为应取决于调用该方法的对象,同一个方法的行为随上下文而异。对于形参为基类的引用,他可以指向基类也可以指向派生类,也就是说虽然他的输入类型是基类,但是输入的是派生类也是可以的。...原创 2022-08-29 21:19:48 · 123 阅读 · 0 评论 -
C++ primer 第十二章课后练习
【代码】C++ primer 第十二章课后练习。原创 2022-08-23 22:42:52 · 318 阅读 · 0 评论 -
第12章 类和动态内存分配(new运算符)
静态类成员可以在类声明之外使用单独的语句进行初始化,因为静态类成员是单独存储的,而不是对象的组成部分。返回指向const对象的引用:如果函数返回(通过调用对象的方法或将对象作为参数)传递给它的对象,可以通过返回引用来提高其效率。默认构造函数:如果没有任何构造函数,C++将创建默认构造函数,编译器将提供一个不接受任何参数,也不执行任何操作的构造函数,那么它的值在初始化是未知的。将已有对象赋值给另一个对象(与复制构造函数类似,不过复制构造函数是创建新对象,赋值是赋值给已存在对象)空指针:nullptr。原创 2022-08-22 23:06:42 · 686 阅读 · 0 评论 -
C++ primer 第十一章课后练习
【代码】C++ primer 第十一章课后练习。原创 2022-08-19 16:28:40 · 229 阅读 · 0 评论 -
第11章 使用类(运算符重载,友元函数,类转换)
非成员版本的重载运算符函数所需的形参数目与运算符使用的操作数数目相同,而成员版本所需的参数数目少一个,因为其中的一个操作数是被隐式地传递的调用对象。构造函数相当于定义类的类型,当给对象赋值时,会强制转换成类的类型(通过构造函数创建一个临时变量将类型初始化,当在构造函数前加关键词explicit时会关闭自动类型转换这一特性)如磅转换成石英:首先设计一种合适的类型(以两种方式(磅和石英)来表示重量),因此可以将重量的两种表示放在同一个类中,然后提供以这两种方式表达种类的类方法。常用的友元:重载...原创 2022-08-17 22:24:26 · 105 阅读 · 0 评论 -
C++ primer第十章课后练习
代码】C++ primer第十章课后练习。原创 2022-08-09 22:40:54 · 107 阅读 · 0 评论 -
第十章 对象和类
的C++工具,它将。原创 2022-08-08 23:11:42 · 90 阅读 · 0 评论 -
C++ primer第九章课后练习
代码】C++ primer第九章课后练习。原创 2022-08-03 17:46:37 · 166 阅读 · 0 评论 -
第九章 内存模型和名称空间(单独编译)
链接性(linkage)描述了名称如何在不同单元间共享,链接性为外部的名称可在文件间共享,链接性为内部的名称只能由一个文件中的函数共享,无链接性只能在当前函数或代码块中访问。C++可以通过定义一种新的声明区域来创建命名的名称空间,一个名称空间中的名称不会与另外一个名称空间的相同名称发生冲突,同时允许程序的其他部分使用该名称空间中声明的东西。如果在多个文件中使用外部变量,需要在一个文件中包含该变量的定义,在使用该变量的其他所有文件中使用extern关键字声明它。(在函数中的变量的声明区域就是所在代码块)...原创 2022-08-02 22:58:55 · 285 阅读 · 0 评论 -
C++ primer 第八章课后练习题
代码】C++primer第八章课后练习题。原创 2022-07-27 17:28:55 · 317 阅读 · 0 评论 -
第八章 函数探幽(内联函数、函数重载、函数模版、引用变量)
常规函数调用也是程序跳到函数的地址,并在函数调用结束后返回,而内联函数,程序无需跳到另一个地址,编译器将使用相应的函数代码替换函数调用。基类引用可以指向派生类对象而无需进行强制类型转换,因此,可以定义一个接受基类引用作为参数的函数,调用该函数时,可以将基类对象作为参数,也可以将派生类对象作为参数。函数重载是指可以有多个同名的函数,类似于一个词有不同的状态(动词、名词),编译器将根据所采取的用法使用有相应特征标(相同参数列表)的原型。实参的类型不正确,但可以转换为正确的类型,这些情况都会生成临时变量。...原创 2022-07-26 22:27:45 · 265 阅读 · 0 评论 -
C++ primer 第七章课后练习
代码】C++primer第七章课后练习。原创 2022-07-19 21:29:52 · 199 阅读 · 0 评论 -
第七章 函数(数组、结构、string、array的函数传递)
第七章 函数(数组、结构、string、array的函数传递)原创 2022-07-11 22:12:37 · 154 阅读 · 0 评论 -
C++primer第六章课后习题
第六章课后题原创 2022-06-28 21:53:53 · 235 阅读 · 0 评论 -
第六章 分支语句和逻辑运算符(if、与或非、switch、continue、?:、文件输入输出)
if、与或非、switch、continue、?:、文件输入输出原创 2022-06-26 21:43:29 · 423 阅读 · 0 评论 -
C++第五章课后
C++第五章课后题原创 2022-06-22 21:48:14 · 256 阅读 · 0 评论 -
C++第四章习题
编写一个C++程序,如下述输出示例所示的那样请求并显示信息:What is your first name? Beety SueWhat is your last name? YeweWhat letter grade do you deserve? BWhat is your age? 22Name: Yewe, Betty SueGrade: CAge: 22注意,该程序应该接受的名字包含多个单词。另外,程序将向下调整成绩,即向上调一个字母。假设用户请求A、B或C,所以不必担心D和F之.原创 2022-03-19 20:33:46 · 249 阅读 · 0 评论 -
C++第四章 复合类型(数组、字符串、结构、共用体、枚举、指针)
4.1数组数组(array)是一种数据格式,能够存储多个同类型的值。创建数组:声明存储在数值中的值的类型;数组名;元素数typeName arrayName[arraySize]C++数组从0编号,带索引的方括号数值初始化对不同值用逗号隔开,花括号括起来将sizeof运算符用于数组名,得到的将是整个数组中的字节数,但如果将sizeof用于数组元素,则得到的是元素的长度。只有在定义数组时才能使用初始化,以后就不能使用了,也不能将一个数组赋值给另一个数组,但是可以使用下标给数组元素赋值。初始化数原创 2022-03-19 16:39:27 · 740 阅读 · 0 评论 -
C++第三章习题
1.编写一个小程序,要求用户使用一个整数指出自己的身高(单位为英寸),然后将身高转换为英尺和英寸。该程序使用下划线字符来指示输入位置。另外一个const符号常量来表示转换因子。#include<iostream>int main(){ using namespace std; const int swift = 12; float hight; cout << "请输入您的身高:___\b\b\b";%\b表示退格 cin >> hight; cout原创 2022-03-05 16:35:52 · 131 阅读 · 0 评论 -
C++第三章变量、常量、运算符
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2022-03-04 20:23:06 · 430 阅读 · 0 评论 -
C++primer第六版第二章课后练习记录
C++primer第六版第二章课后练习记录编写一个C++程序,它显示您的姓名和地址。#include <iostream>int main(){ using namespace std; char name,address; cout << "请输入您的姓名:"; cin >> name; cout << "请输入您的地址:"; cin >> address; cout << "您的名字是" <<原创 2022-01-07 22:12:31 · 183 阅读 · 0 评论