自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++-入门到精通【18】string类和字符串流处理的深入剖析

我们通过头文件<string>来定义的string类型的变量,其实一个类模板特化的对象。类模板定义在头文件<string>中,并在命名空间std中使用typedef或using声明为设置一个别名string所以我们才可以用关键字string来声明一个字符串对象。初始化string对象与是等价的,后者并不是一个赋值操作,而是会隐式的调用拷贝构造函数进行对象初始化的过程。这里的初始化和赋值的意义并不相同,初始化是在对象创建过程中进行资源的分配,如果初始化失败,则这个对象不存在。

2025-06-12 12:37:46 303

原创 C++学习-入门到精通【17】自定义的模板化数据结构

本文中详细介绍了类模板的从属名称,以及讨论了在模板编程中什么情况下,需要显式的指明一个标识符是从属名称,以及从属名称到底有什么用,是因为什么出现的。

2025-06-10 21:07:24 1204 1

原创 C++学习-入门到精通【16】自定义模板的介绍

在前面的学习中我们使用了不少的标准库中预先封装好的模板化的容器和算法。和使程序员可以非常方便地表示若干不同的相关(重载)的函数或者类,这样的函数被称为,而类被称为。这种产生函数和类的技术称为。可以将函数模板和类模板比作一个棕子,而棕子内部可以有不同的馅料,虽然使用这个模板做出来的都是相同外形(功能相同),但是里面的口味却不同(操作对象不同)。类模板也被称为,因为它们需要一个或多个参数,来说明如何自定义一个用于产生类模板特化的通用类模板。只要定义了一个类模板,当需要一个特定的类模板特化时,我们可以非常简单得到

2025-06-07 23:16:54 765

原创 C++学习-入门到精通【15】异常处理深入剖析

下面代码中我们定义类,该类是标准库(在头文件中定义)的一个派生类。类是标准库exception类(在头文件)的派生类,它是C++用于描述运行时错误所创建的标准基类。而类exception是C++标准库中描述所有异常而建立的标准基类。一个从类派生出来的典型异常类只定义了一个构造函数,这个构造函数将带有错误信息的字符串传递给基类runtime_error的构造函数。所有的异常类都直接或间接地从含有虚函数what的exception类派生而来,而what函数返回一个异常对象的错误信息。

2025-06-07 15:12:35 925

原创 C++学习-入门到精通【14】标准库算法

对于标准模板库中提供的算法,它们提供了实现一种功能的通用方法,所以算法只是将功能抽象出来,使得不同的容器只要能够满足最低的迭代器要求,那么就可以使用相同的算法来实现相同的功能,即使它们容器内部中要实现该功能的函数其实不一样。对于STL中的容器、算法和迭代器这三个主要组件,容器规定数据的存储结构以及对这些数据的一些操作方法,算法定制了通用功能的实现,而算法通过迭代器来访问容器中的数据,使得定制的功能能够在对应容器中被执行。

2025-06-05 22:27:17 1466

原创 C++学习-入门到精通【13】标准库的容器和迭代器

STL(Standard Template Library)定义了强大的、基于模板的、可复用的组件,实现了许多通用的数据结构及处理这些数据结构的算法。容器、迭代器和算法本章中将介绍STL,并且将讨论它的三个关键组件——容器(container,流行的模板数据结构)、迭代器(iterator)和算法STL容器是能存放几乎所有类型的数据的数据结构。各容器中共同的成员函数每个STL容器都有相关的成员函数,这些成员函数的一个子集在所有的STL容器中都有定义。迭代器STL迭代器和指针有着类似的属性,它们。

2025-06-03 22:33:41 1221

原创 C++学习-入门到精通【12】文件处理

所谓序列化的对象,是指一个字节序列表示的对象,这个序列不仅包含这个对象的数据,它也包含有关对象类型和对象中存储的数据的类型信息。注意必须使二进制模式打开文件,这是因为文件中是没有结构的,我们是通过在内存中的设计结构,然后将存储为这种结构的数据存储到文件中,下次读取时,这些数据仍能还原成这种结构。下面的程序可以显示相关贷款信息,包括余额为0的客户(不欠公司任何钱的客户)、贷款余额为负的客户(向公司提供贷款的客户)和贷款余额为正的客户(使用公司提供的服务或货物而有欠款的客户)。C++没有在文件上强加任何结构。

2025-06-01 21:52:05 1154

原创 C++学习-入门到精通【11】输入/输出流的深入剖析

C++提供多种流操纵符来完成格式化的任务。流操纵符的功能包括设置域的宽度、设置精确度、设置和取消格式状态、设置域的填充字符、刷新流、向输出流添加新行(并刷新流)、在输出流中添加一个新字符、跳过输入流中的空白,等等。程序员可以创建自己的流操纵符。下面的代码中展示了创建和使用新的无参数操纵符belltab和endLine。对于输出流操纵符来说,它们的返回类型都必须是ostream&类型的。// 输出一个\a// 输出一个 \r// 输出一个 \t// 输出一个 endlint main()

2025-05-31 19:00:17 967

原创 C++学习-入门到精通【10】面向对象编程:多态性

文章中详细介绍了C++中多态性的原理

2025-05-30 15:33:55 1736

原创 C++学习-入门到精通【9】面向对象编程:继承

那么我们应该如何将一个类定义为另一个类的派生(从另一个类继承)呢?这是最常用的继承形式——public继承的一个例子。本文后续部分会继续讨论private继承和protected继承。在各种形式的继承中,基类的private成员都不能被它的派生类直接访问,但是这些private基类成员仍被继承(派生类也包含它们)。

2025-05-27 11:33:57 1722

原创 一些运算符重载的例子

上面代码中并没有重载双方括号运算符,因为它需要创建一个辅助类(管理单行,将一行看成一个一维数组来管理),在该辅助类中重载一个[]运算符,再在二维数组类中重载一个[]运算符,让它访问一行。由链式使用两个[]运算符来实现二维数组的访问,感兴趣的同学可以自己试着实现一下。上面代码中只定义了HugeInt类中的加法操作,大家还可以参照上面的形式,补充其他运算。

2025-05-25 09:33:42 316

原创 C++学习-入门到精通-【8】运算符重载:string类

本章将介绍如何将C++中的运算符与类对象结合在一起使用,这个过程被称为运算符重载。<<就是C++内置的重载运算符的一个例子,它即可以作为流插入运算符,又可以作为左移运算符。除此之外,C++语言还重载了加法运算符(+)和减法运算符(-),在基础数据类型如整数算术运算、浮点数算术运算和指针算术运算中,这两个运算符会根据上下文执行不同的运算。C++允许程序员重载大部分由类使用的运算符——编译器基于操作数的类型产生合适的代码。由重载运算符完成的工作也可以通过显式函数调用完成,但通常采用运算符形式更自然。

2025-05-24 12:27:23 925

原创 C++学习-入门到精通-【7】类的深入剖析

上面代码的set成员函数中使用了一个在头文件中定义的invalid_argument类,定义了一个该类的对象用以在函数的实参不合法时抛出一个类型为的异常。客户代码中可以使用之前使用过的语句来捕获该异常。跟在类名称后面的圆括号表示对该类的构造函数的一个调用,其中我们指定一个用户自定义的错误信息字符串。在异常对象被创建之后,此throw语句立即终止函数setTime,然后异常返回到尝试设置时间的代码处。在printUniversal函数中使用流操纵符,它用于指定当输出位宽大于输出整数值中数字个数时,所显示的填充

2025-05-17 21:00:13 1102

原创 C++学习-入门到精通-【6】指针

以使用指针变量的按引用传递方式传递一个变量实质上并没有按引用传递任何东西,传递的其实是这个变量的指针(这个变量的地址),将该地址复制到函数对应的指针形参中。上面的例子中使用一个引用变量来访问array对象中的元素,前面加上了一个const表明,在这个作用域中,item这个别名不应该修改它引用的值。一个好的程序应该是遵循最小特权原则的,也就是一个函数是有足够的权限访问函数参数中的数据来完成指定的任务的,但是权限不能过大。当一个指针变量的值为。在之前写过的代码中我们也遵循着这样的原则,还记得之前使用过的。

2025-05-10 23:50:11 598

原创 C++学习-骑士巡游问题

代码如下,这里使用的是可达性试探法。

2025-05-10 10:44:24 179

原创 C++学习-入门到精通-【5】类模板array和vector、异常捕获

vertor<类型> 名称(大小);示例代码int main()// 与array类模板的声明类似,在<>中指定保存元素的类型,但是容量在变量名后指定// 创建一个有7个int类型元素的vector对象// 创建一个有7个int类型元素的vector对象// 输出两个vector对象的大小及默认初始值// 输出17个整数用于初始化两个vector对象// 输出赋值后的vector对象的值// 创建一个新vector对象,并使用integer1赋值。

2025-05-09 23:00:40 1714

原创 C++学习-入门到精通-【4】函数与递归入门

头文件向用户提供了一系列的数学函数。示例:使用负数作为sqrt的参数时示例:示例:因为设置的PI的数值是一个近似值,所以cos(PI/2)得到的是一个0的近似值。示例:示例:示例:函数使用示例:在上面的结果中可以得到, 可以取两个结果——和,2更接近0,所以商取2,得到的余数为;可以取两个结果——和,-2更接近0,所以商取-2,得到的余数为;而remainder函数取的商的原则是使得除法的结果更接近0,所以在的两个结果——和之间选择了4,因为4.8比3.6更接近4.6。示例:示例:示例:示例:示例:

2025-05-06 19:58:27 1000

原创 C++学习-入门到精通-【3】控制语句、赋值、自增和自减运算符

对任何可求解的问题来说,都能够以一种特定的顺序执行一系列动作来完成。执行的动作这些动作的执行顺序举个例子来说明动作的执行顺序是非常重要的。一个人早上会按照下面的算法:①起床;②脱掉睡衣;③沐浴;④更衣;⑤吃早饭;如果上面动作的执行顺序发生改变:①起床;②脱掉睡衣;③更衣;④沐浴;⑤吃早饭;这个从如果按照改变之后的顺序执行,那么他将会湿瀌瀌的吃早饭。所以在程序执行过程中,语句的执行顺序也是非常重要的,所谓的程序控制,就是指定语句(动作)的执行顺序。

2025-05-01 16:07:03 905

原创 C++学习-入门到精通-【2】类、对象和字符串的介绍

在本文中我们会从一个类的例子中逐步拆分介绍如何定义一个类,以及如何使用它;// 成员函数 // ...... // 成员属性 // ...... };一个类的定义需要使用关键字class,之后接着类的名字,通常使用骆驼风格(Pascal case),首字母大写随后的每个单词的首字母大写;注意类的体由{}包围,类的以之后的;结束。// 定义一个用于管理学生成绩的类// 它具有一个实现打印欢迎功能的成员函数public:// 输出一条欢迎信息int main()

2025-04-26 15:02:11 1147

原创 C++学习-入门到精通-【1】C++编程入门,输入/输出和运算符

缓冲区是文件管理系统的一个组成部分,可以分为输入缓冲区和输出缓冲区,数据在进入流之后并不是直接就传送给内存/硬盘,而是会先传输到缓冲区,直到缓冲区填满里面的数据都会流入下一个地方。这段代码输出结果与之前的代码相同,所以每个流插入都会在上一个流插入停止输出的地方开始继续插入输出。这段代码在输出了第一个字符串之后,第二行的流输出语句,会继续在sample后面的空格之后输出of cout;与C语言不同,根据C++的标准,如果程序执行到main的末尾但没有遇到return语句,也会认为程序成功的终止,就像遇到了。

2025-04-25 17:16:36 548

原创 C++学习-入门到精通-【0】计算机和C++简介

于是一个类的对象也叫这个类的一个实例。在构建一个新的类和程序时,可以重用已有的类,这可以节省时间和精力,并且重用还有助于构建一个更加可靠、有效的系统,因为被重用的类肯定是经过了大量的测试、使用及性能调试。软件开发者在编写程序的过程中发现,相较于早期的开发方法,采用模块化的、面向对象的设计和实现方法,可以显著软件开发小组的生产效率——面向对象的程序更易于理解、纠正和修改。我们可以通过继承来快速和方便的创建一个新的类,将原来的类的属性和成员函数吸收为自己的特性,同时可以添加新的特性。这些设备总称为硬件;

2025-04-23 21:15:38 805

原创 c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第七式】程序的编译

程序的翻译环境程序的执行环境c语言程序的编译+链接预定义符号介绍预处理指令#define宏和函数的对比预处理操作符#和##的介绍命令定义预处理指令#include预处理指令#undef条件编译__FILE__ // 进行编译的源文件__LINE__ // 文件当前行号__DATE__ // 文件被编译的日期__TIME__ // 文件被编译的时间__STDC__ // 如果编译器遵循ANSI C,其值为1,否则未定义。

2025-04-22 23:58:28 1098

原创 c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第六式】文件操作

为什么使用文件什么是文件文件的打开和关闭文件的顺序读写文件的随机读写文本文件和二进制文件文件读取结束的判定文件缓冲区磁盘上的文件就是文件。但是在程序设计上,我们谈到的文件一般有两种:程序文件、数据文件;本节详细的对c语言中数据文件的使用进行了详细的介绍,包括对文件读写操作使用的函数,以及通过文件位置指针的操作函数来对文件进行随机读写,并指出了feof函数可能出现的使用错误,在最后,介绍了文件缓冲区的概念;

2025-04-20 16:07:02 1079

原创 c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理

大家在使用数组时肯定都会有过这样的疑问,如果一个数组的长度不足了,可以延长这个数组吗?使其能够满足存储的需求。又或者是现在不确定数组应该设为多长,先把它放着,等之后再设置它的长度。上面的这些需求,数组显然是无法实现的,那么c语言中有什么东西能够做到这一点呢?动态内存分配!你现在不知道需要多大的空间,没关系,之后你明确了的时候,使用动态内存分配,将你要的空间分配给即可。为什么存在动态内存分配动态内存函数的介绍mallocfreecallocrealloc常见的动态内存错误。

2025-04-06 20:42:26 1196

原创 c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第四式】自定义类型详解(结构体、枚举、联合)

c语言中虽然定义得有许多的类型,如char、int、double等等,但是现实生活中需要描述的问题,仅仅使用这些已有类型是不够的,所以在c语言中,程序员可以根据自己的需要,定义出自己的类型结构,以满足需求。结构体:结构体类型的声明结构的自引用结构体变量的定义和初始化结构体内存对齐结构体传参结构体实现位段(位段的填充&可移植性)枚举枚举类型的定义枚举的优点枚举的使用联合联合类型的定义联合的特点联合的使用有了结构体类型,之后应该如何定义变量呢?

2025-04-04 16:44:37 820

原创 c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第三式】字符函数和字符串函数

c语言中对字符和字符串的处理非常频繁,但c语言本身是没有字符串类型的,字符串通常存储在常量字符串或字符数组中。常量字符串适用于不需要对其进行修改的字符串函数。strlen函数的作用是获得一个字符串的长度;接收一个const修饰的字符指针变量,这个指针指向的字符串必须有结束符\0;返回一个无符号(易错点)的int类型的数值,表示这个字符串的长度(不包括结束符\0如果没有返回值,则表示出错;// 使用示例int main()printf("a的长度 = %d\n", strlen(a));

2025-04-01 22:04:41 797

原创 c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第二式】指针

字符指针数组指针指针数组数组传参和指针传参几种数组、指针之间的比较函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组的笔试题指针是一个存储地址的变量,地址是一块内存空间的唯一标识;指针的大小是固定的(4字节或8字节);指针是有类型的,它的类型决定它 + - 整数时移动的步长、*解引用操作时的权限;指针是能够进行运算的,+ - 整数、指针相减、指针的关系运算;接下来,就让我们继续探讨指针的进阶主题。对于普通的指针,我们都已经很熟悉了。

2025-03-24 19:32:57 1374

原创 c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第一式】数据的存储

本章节的重点是数据类型详细介绍整型在内存中的的存储:原码、反码、补码大小端字节序介绍及判断浮点型在内存中的存储解析char // 字符数据类型short // 短整型int // 整型long // 长整型long long // 更长的整型float // 单精度浮点数double // 双精度浮点数// c语言有没有字符串类型?// 没有以及他们所占存储空间的大小。使用这个类型开辟内存空间的大小(大小决定了使用范围)如何看待内存空间的视角什么是大端小端?

2025-03-18 20:10:18 1345

原创 c语言修炼秘籍【第七章】const与c语言中一些错误代码

而数组内部的内存使用分配是从低到高的,arr[0]的地址在最低位,当循环进行到第11次 - - arr[11]设置的其实是i的值,此时将 i 的值设为了0,循环继续。这是因为,程序要进行报错也是需要执行时间的,访问arr[11]时程序仍处于循环中,没有时间报错就又进入了下一次循环。test1()可以正常使用指针对n为进行修改,也可以对p指向的位置进行修改。test2()不能通过指针对n进行修改,可以对p指向的位置进行修改。,arr后分配,地址会比i的地址低,分配到的地址为。,i先分配空间,地址为。

2025-03-16 16:34:55 590

原创 c语言修炼秘籍【第六章】结构体

将结构体与数组进行对比:数组是一组相同类型的元素集合;结构体是一些值的集合,它们类型可以不同,这些值被称为成员变量。使用结构体类型定义变量int x;int y;} p1;// 声明类型的同时定义变量p1// 定义结构体变量 p2// 初始化:定义变量的同时赋初值struct Stu// 名字int age;// 年龄int data;// 结构体嵌套的初始化// 结构体嵌套的初始化本文对c语言中使用到的结构体进行了简单介绍,更详细的会在后续攻略中详解。

2025-03-16 14:30:29 682

原创 c语言修炼秘籍【第五章】指针

本文会从介绍指针是什么开始,循序渐进地介绍指针的使用、指针使用时会遇到的问题、指针能进行哪些运算、指针与数组之间的关系,以及指针数组这些内容。本文对c语言中使用的指针进行了较简略的介绍,包括什么是指针,指针类型有什么用,指针的一些运算,什么是野指针,如何利用指针访问数组,二级指针使用中会出现的问题,以及指针数组。

2025-03-15 20:11:18 1639

原创 c语言修炼秘籍【第四章】操作符

本文会对c语言中使用到的操作符进行介绍,包括算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员表达式求值单目操作符的种类!// 逻辑反操作- // 负值+ // 正值& // 取地址sizeof // 操作数的类型长度(以字节为单位)~ // 按二进制位取反++ // 前置、后置++-- // 前置、后置--* // 间接访问操作符(解引用操作符) -- 指针的使用。

2025-03-13 22:44:01 1025

原创 c语言修炼秘籍【第三章】数组

本文将会介绍常用到的一维数组和二维数组是如何使用及它们在内存中是如何存储,说明何为数组越界,并讨论数组在作为函数参数时应该如何使用。在最后附带三子棋和扫雷的代码实现详解。本文对一维和二维数组的初始化、创建、使用,作出的简要的介绍,并通过冒泡排序算法的实现,详细说明了当数组作为函数参数时的性质 - - 传递的是首元素地址。在最后,给出了两个数组的使用实例,附带了完整的实现代码,并配有详细注释。

2025-03-12 01:24:05 1162

原创 c语言修炼秘籍【第二章】函数

本文会从函数是什么开始,逐一介绍函数的语法结构,如何声明和定义一个函数,函数的参数类型,调用函数时的传参类型,函数的调用方式,函数递归,并在最后对汉诺塔、青蛙跳台阶和八皇后问题进行详细分析(包含全部代码)

2025-03-10 18:55:18 1258

原创 c语言修炼秘籍【第一章】分支与循环语句

在处理现实中的问题时,我们总会遇到需要作出选择或是需要重复多次的完成一种事件。你去图书馆学习,需要日复一日的坚持,每多学一天,你的代码功力就能+1,当你的代码功力,达到了某一程度,你就能够迎娶白富美,走上人生巅峰。为了实现这些目的,c语言提供了分支语句,用以实现选择;提供循环语句,用以实现重复多次的机械活动;表达式语句函数调用语句控制语句复合语句空语句分支、循环语句属于控制语句。控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由各种特定的语句定义符构成;

2025-03-08 21:06:44 1111

原创 C语言修炼秘籍【第零章】c语言概述

c语言是一门编程语言。语言的作用就是交流,人们可以利用它与计算机进行交流,让计算机知道你需要它完成什么工作。本系列文章是对笔者在c语言学习的总结记录。本文会先粗略的介绍c语言中需要学习的内容。

2025-03-07 22:47:14 1532

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除