![](https://img-blog.csdnimg.cn/direct/3806caececbe43818d33a85740322a04.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++基本语法
文章平均质量分 64
以《21天学通c++》这本书为学习参考
青石横刀策马
菜鸟一只
展开
-
《21天学通C++》阶段性成果测试题——hstring(手写string类)
总体考察了类的使用,缓冲区考察了指针和数组的使用、增删改查、考察编码思维、考察了类的重载。1.初始化子字符串的起始位置为-1,表示未找到,若buffer或findHstring为空,则返回-1。右边的字符串不为空,则分别获取母串和子串的长度(用循环),然后创建一个固定大小的数组。3.然后循环遍历寻找子串在母串中的起始位置,循环时可以通过两个长度相减,避免循环越界。2.如都不为空,则分别获取双方的字符串长度(用循环),然后。右边的字符串为空,则输出原来的字符串。是否为空,有一方为空则返回另一方。原创 2024-05-12 23:32:38 · 713 阅读 · 0 评论 -
《21天学通C++》(第二十一章)理解函数对象
了函数调用操作符 operator(),使得类的实例可以像函数一样被调用。谓词是指一个能够返回布尔值(true或false)的函数或函数对象。一元谓词是一种特殊的一元函数,它接受单个参数并返回一个布尔值。一元谓词是一种特殊的二元函数,它接受两个参数并返回一个布尔值。一元函数是指接受单个参数的函数。一元函数是指接受两个参数的函数。原创 2024-05-10 17:55:48 · 262 阅读 · 0 评论 -
《21天学通C++》(第二十章)STL映射类(map和multimap)
语法// 自定义比较函数// 基于字符串长度进行比较// 使用自定义比较函数的std::map// 使用自定义比较函数的std::multimap// 向map中插入元素。由于map中键必须是唯一的,这里插入的元素将根据自定义的比较逻辑被排序。// 向multimap中插入元素。multimap允许有相同键的多个元素。// 允许重复键// 遍历map并打印键值对// 遍历multimap并打印键值对return 0;原创 2024-05-09 22:17:52 · 397 阅读 · 0 评论 -
《21天学通C++》(第十九章)STL集合类(set和multiset)
setmultiset1.set和multiset会自动按照元素的值进行排序。2.由于元素是有序的,set和multiset可以提供对元素的快速查找,通常是基于二叉搜索树实现的,查找操作的时间复杂度为O(log n)。3.set保证了容器中元素的唯一性,即不会有重复的元素。这在需要确保数据集中没有重复项时非常有用。原创 2024-05-08 22:36:18 · 397 阅读 · 0 评论 -
《21天学通C++》(第十八章)STL list和forward_list
1.:在任意位置插入或删除元素的开销是 O(1),不需要像 std::vector 那样可能需要移动大量元素。2.:访问 std::list 中的元素需要从头开始遍历到所需位置,访问特定元素的时间复杂度为O(n)原创 2024-05-06 17:11:21 · 562 阅读 · 1 评论 -
《21天学通C++》(第十七章)STL 动态数组类(vector和deque)
1.在数组末尾添加元素所需的时间是固定的,删除亦是如此2.在数组中间添加或删除元素所需的时间,和该元素后面的元素个数成正比3.动态存储。原创 2024-05-05 18:13:39 · 488 阅读 · 0 评论 -
《21天学通C++》(第十六章)STL string类
1.减少在创建和操作字符串方面的操作2.在内部管理内存分配细节,提高程序稳定性3.提供复制构造函数和赋值运算符4.提供截短、查找、删除、比较等函数。原创 2024-05-04 18:25:43 · 204 阅读 · 0 评论 -
《21天学通C++》(第十五章)标准模板库简介
本章简单介绍STL容器、迭代器和算法的基本概念,之后几章会分别详述。原创 2024-05-03 16:44:34 · 1578 阅读 · 0 评论 -
《21天学通C++》(第十四章) 宏和模板介绍(2)
相较于宏,C++更推荐使用模板编程,因为它们提供了更好的类型安全、更清晰的语法和更易于调试的代码。原创 2024-05-02 18:22:04 · 244 阅读 · 0 评论 -
《21天学通C++》(第十四章) 宏和模板介绍(1)
例子25#define PI3.1415doublereturn 0;预处理无法知道数据类型,即PI是3.1415,但不知道是什么类的数据例子# define SQUARE(x)((x) *(x)) //计算平方值 # define PI 3.1415 # define AREA(r)((PI) *(r) *(r)) //计算圆面积 int main() {return 0;原创 2024-05-02 16:46:37 · 429 阅读 · 0 评论 -
《21天学通C++》(第十三章) 类型转换运算符
它在运行时检查对象的实际类型,以确定转换是否有效,主要用于涉及多态性的类层次结构中,尤其是在需要将基类指针或引用安全地转换为派生类指针或引用时。主要用于基本数据类型之间的转换,如整数类型到浮点数类型的转换,或者在类层次结构中向上转型(从派生类指针或引用转换为基类指针或引用)。只能应用于含有虚函数的类,因为它们需要运行时类型信息(RTTI)来确定对象的实际类型。C++兼容C语言,有时候需要把C++的类型数据转换为C语言的数据类型。在处理指针时,经常需要把一个类型的指针转化为另一个类型的指针。原创 2024-05-01 17:28:28 · 583 阅读 · 0 评论 -
《21天学通C++》(第十二章)运算符类型与运算符重载
移动赋值运算符是一个接受一个同类型对象的右值引用作为参数的赋值运算符。它允许一个对象通过接管另一个对象的资源来改变其状态,移动构造函数是一个接受一个同类型对象的右值引用作为参数的构造函数。它的主要目的是在对象的构造过程中,将资源从另一个对象“通过重载运算符,可以将复杂的操作封装成简单的运算符形式,简化代码,提高可读性下面举一个简单的例子。因为在后缀运算符中,首先会复制当前对象,再对当前对象执行递增递减运算,最后返回复制对象,会多一步。,属于C++11标准的一部分,旨在避免复制不必要的临时值。原创 2024-04-30 21:16:04 · 390 阅读 · 0 评论 -
《21天学通C++》(第十一章)多态
为了最大限度地减少代码,提高可读性。原创 2024-04-29 23:33:30 · 1386 阅读 · 0 评论 -
《21天学通C++》(第十章)实现继承(2)
保护继承是一种继承方式,当一个类使用保护继承时,基类中的公有成员(public)和保护成员(protected),继承时使用关键字。无论是保护继承还是私有继承,基类的构造函数和析构函数仍然可以被派生类的对象调用,以完成对象的构造和析构。在所有直接基类构造函数执行完毕后,派生类中的成员对象(非静态)按照它们在类定义中声明的顺序被构造。:在派生类中,无论是保护继承还是私有继承,派生类的成员函数都可以访问从基类继承来的成员。:无论是保护继承还是私有继承,基类中的公有成员都不能在派生类的对象中直接访问。原创 2024-04-29 20:38:13 · 1212 阅读 · 0 评论 -
《21天学通C++》(第十章)实现继承(1)
覆盖是一种极端情况,即派生类中的重载方法会隐藏基类中方法的所有重载版本,导致需要调用时无法调用,示例代码如下。解决方法3:在派生类中,把基类中的方法全部重载一次,并在派生类中就调用基类方法。只要派生类中实现了从基类中继承的函数,且返回值和标值相同,就可以覆盖。如果基类包含重载的构造函数,可以使用初始化列表传递参数。,避免不定义的情况下,随机数值产生影响。解决办法1:使用作用域解析符。解决方法2:在派生类中使用。同样使用作用域解析运算符。在构造一个派生类时,使用作用域解析运算符。若想调用基类中的方法。原创 2024-04-28 23:53:24 · 406 阅读 · 0 评论 -
《21天学通C++》(第九章)类和对象(2)
(1)移动构造函数是C++11引入的一种特殊的构造函数,它允许在创建对象时,将一个已存在对象的资源。上述代码中的复制过程就叫浅复制,即对于动态分配的内存或指向动态内存的指针成员,则仅仅复制。(2)在某些情况下,为了避免不必要的资源复制,提升程序效率,才会使用移动构造函数。this包含当前对象的地址,在类成员方法中调用其他成员方法时,编译器将隐式的传递。(1)通过声明私有的复制构造函数,,而不是复制指针指向的内存内容。给新创建的对象,而不是复制资源。默认情况下,结构中的成员默认为。默认情况下,类成员默认为。原创 2024-04-17 21:54:01 · 422 阅读 · 0 评论 -
《21天学通C++》(第九章)类和对象(1)
如果类是设计图纸,则构造函数是按照图纸组装过程中的第一步。构造函数可在类声明的内外定义。访问,因为外部无法访问private数据,所以可以实现。访问对象的属性,该对象是使用new进行实例化的。代码示例如下,至于为什么要重载,优点参考。构造函数是特殊的函数,用于在创建对象时。,冒号后面列出了各个成员变量和初始值。由包含在括号中的参数声明后面的。可以通过这两个关键字来控制。原创 2024-04-16 23:48:47 · 460 阅读 · 0 评论 -
《21天学通C++》(第八章)阐述指针和引用
将指针递增或递减,即将其包含的地址增加或减少指向的数据类型的sizeof,例如。给c和d,然后c和d再被calc函数调用,占用了内存,复制也有时间开销。,会返回一个NULL,可以通过这个去判断是否异常,或者进行其他操作。向函数传递参数,可以避免复制过程,提高性能。此时c和d不再是a和b的复制,而是a和b的。可改指针包含的地址,不可修改指向的数据。:使用new动态分配后,没有delete。可改指向的数据,不可改指针包含的地址。的变量,通常用十六进制表示法。上面代码中,是将a和b。若使用调用,则可以避免。原创 2024-04-16 00:16:49 · 524 阅读 · 0 评论 -
《21天学通C++》(第七章)使用函数组织代码
内联函数是一种编译器优化技术,旨在减少函数调用的开销。当函数声明为内联时,通常需要在头文件中包含函数的实现,这会导致头文件变得庞大,增加源文件的编译时间。如果内联函数体很大,这可能会导致生成的可执行文件体积增大,造成代码膨胀。当函数非常简单、调用频繁,且需要降低开销时,才应该使用内联函数。对于使用auto自动推断返回类型的函数,必须先定义再调用。过度使用内联函数可能会限制编译器的其他优化措施。原创 2024-04-13 18:31:37 · 246 阅读 · 0 评论 -
《21天学通C++》(第六章)控制程序流程
枚举量通过提供具有意义的名称来代表一组相关的值,使得 switch-case 语句更加直观易懂。C++11引入的一种新的for循环,配合auto变量一起使用,可以让代码更加。枚举量可以包含方法和属性,这意味着你可以为每个枚举值定义特定的行为。能看懂就行,不推荐写goto语句,会让代码变得难以阅读和理解。希望循环里的代码至少执行一次时,使用do…,过多的使用会降低代码可读性,并且难以跟踪程序执行过程。True则输出前面的,False则输出后面的。使用三目运算符时,不要写复杂的表达式和条件。原创 2024-04-13 16:09:33 · 234 阅读 · 0 评论 -
《21天学通C++》(第五章)使用表达式、语句和运算符
(1)移位运算符将整个位序列向左移动n,即将数据乘以2^n。(2)移位运算符将整个位序列向右移动n,即将数据除以2^n。(1)后缀运算符时,先将右值赋给左值,再将右值递增或递减。(2)前缀运算符时,先将右值递增或递减,再将结果赋给左值。一个操作数为True,逻辑OR运算结果为True,运算符为。所有的左值都可用作右值,但并非所有的右值都可用作左值。PS:理论上前缀运算符性能高于后缀运算符。指直接对整数的二进制表示进行处理,包括。一个操作数为True时,这种运算的结。果才为True,运算符为。原创 2024-04-12 18:18:52 · 242 阅读 · 0 评论 -
《21天学通C++》(第四章)管理数组和字符串
PS:使用C++字符串是,要添加头文件。PS:使用动态数组时,记得添加头文件。原创 2024-04-12 17:37:18 · 146 阅读 · 0 评论 -
《21天学通C++》(第三章)使用变量和常量
它是一个预处理器宏,进行的是文本替换,而不知道类型,而且优化空间小,一旦出现bug难以定位。原创 2024-04-11 21:51:31 · 336 阅读 · 0 评论 -
Windows配置VScode的C++环境
打开文件夹——选择code_file——新建一个文件helloworld.cpp,并输入以下代码,F5运行。下载下来后是一个压缩包,直接解压缩,并记住解压缩后文件的所在位置,我这里是D:\mingw64。使用模板创建——Others——创建一个tasks.json,并用以下代码替换内容。随后按win+R,输入cmd,回车,输入g++,回车,出现以下信息表示配置成功。开始菜单里面搜索“编辑系统环境变量”环境变量——系统变量——双击path。随后新建一个文件夹用以存放代码。原创 2024-04-10 23:01:27 · 1043 阅读 · 0 评论 -
Ubuntu配置VScode的C++环境
使用模板创建——others,创建出tasks.json,用以下代码替换内容。把launch.json里的代码删除,用以下代码替代,F5运行。我这里使用的是星火应用商店,在商店里面可以直接下载安装。原创 2024-04-10 19:12:36 · 494 阅读 · 0 评论