![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++初阶知识
文章平均质量分 84
明 日 香
快和我一起快乐学习
展开
-
Stack_经典例题_最小栈
在满足栈的特点的同时,还需要设计一个接口,就是获取栈内的最小元素!原创 2024-04-11 20:23:44 · 241 阅读 · 0 评论 -
模板的进阶
前提须知: 模板的本质其实就是传参,换言之,模板可以类比函数传参,二者的特性类似,但各有各的特点,可以通过函数传参来学习模板。以上面类模板代码为例,我们可以知道, template 中的 size_t N = 10 就算我们所讲的非类型模板参数。和其他模板参数不同的是,非类型模板参数 = 类型 + 常量 ,他的诞生也是为了让编译器在编译的过程中尽可能的省力,也让使用者可以更为方便和便捷的使用一个模板但却创造出更多的类。同时减少了代码的冗余,通过为不同原创 2024-04-11 19:38:38 · 558 阅读 · 0 评论 -
list的常用接口底层实现与介绍
自定义类型的完善 ,因为我们写的是一个自定义类型,所以读取*it后解决完后还是一个自定义类型的数据结构,所以需要在使用数据结构的写法,表明其中内部的数据即可!it->是需要进行拆解的,可以变成it.operator()->,这里其实是编译器的一种隐藏操作,之前的it++也是一种隐藏操作,可以变化为it.operator++()而it->_a1这里隐藏的是另一个-> ,也就是图中第二个->,第一个->是属于it的重载运算符标识!原创 2024-04-04 15:49:14 · 1291 阅读 · 3 评论 -
vector的简单介绍及常用接口的模拟实现
本篇博客是从底层角度来模拟实现STL的vector,在C++的学习过程中vector是一个非常重要的知识点,vector有多个接口,且每个接口的功能和接收参数都不一样,所以本篇将会重点介绍和讲解几个重要接口的常用方式,并将其进行模拟实现。vector 容器名储存int型的值 vector v;储存double型的值 vector v;储存string型的值 vector v;储存结构体或者类的值的值 vector v;原创 2024-03-30 15:06:27 · 582 阅读 · 0 评论 -
string 底层模拟实现常用接口
本篇博客是从底层角度来模拟实现STL的string,在C++的学习过程中string是一个非常重要的知识点,在之前的介绍讲解中,我们了解到string有多个接口,且每个接口的功能和接收参数都不一样,所以本篇将会重点介绍和讲解几个重要接口的常用方式。C++:string相关内容的简单介绍-CSDN博客什么是string?为什么要学习使用string?string的优势?原创 2024-03-09 11:42:36 · 817 阅读 · 2 评论 -
string 类 经典习题之数字字符相加
给定两个字符串形式的非负整数num1和num2,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如BigInteger), 也不能直接将输入的字符串转换为整数形式。原创 2024-02-29 18:28:45 · 342 阅读 · 4 评论 -
C++:string 相关接口的简单介绍
string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_string string,所以string 在底层的本质上也是一个模板不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std;原创 2024-02-28 15:35:46 · 845 阅读 · 3 评论 -
C++ :内存管理 new&delete
在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与 free不会。//类Aclass Apublic://类A的构造函数的初始化列表: _a(a)//类A的析构函数~A()private:int _a;int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数//使用了malloc进行空间的开辟,但是没有初始化操作。原创 2024-02-13 15:08:07 · 1171 阅读 · 18 评论 -
C++:友元函数与友元类
缺点:友元函数不是类的成员但是却具有成员的权限,可以访问类中受保护的成员,这破坏了类的封装特性和权限管控;优点:可以实现类之间的数据共享;比如上面互为友元类,则可以互相访问对方受保护的成员;总结:友元函数是一种破坏封装特性的机制,可以让程序员写代码更灵活,但是不能滥用;原创 2024-02-12 14:21:10 · 449 阅读 · 1 评论 -
C++: const 的 权限放大缩小!
关于权限的放大和缩小问题,在文件领域讲诉可以理解为,当某个文件具有读取权限时,我们赋予这个文件读写权限,这个过程叫做权限的放大,而反之,当某个文件同时,但是我们了它,这就叫做而将权限放大缩小放在C++的指针和引用中,便是变量的数值是否能够修改的问题,如果将变量的数值从可以修改变到不能修改,则是权限的缩小,而将变量的数值从,则是但是在指针和引用中,权限放大是不可取的!原创 2024-02-11 16:21:41 · 881 阅读 · 4 评论 -
C++: 模板初阶
在下列函数中,它们都是swap函数,但是却因为参数的不同和而导致了需要使用函数重载进行实现,虽然解决了问题,但是函数重载也有不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函 数2. 代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?原创 2024-02-07 15:11:19 · 476 阅读 · 9 评论 -
C++:类的简单介绍(六)——初始化列表
1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)引用成员变量const成员变量自定义类型成员(且该类没有默认构造函数时)除了以上三类,其他的成员变量在初始化列表或者在函数体({}内部的)的使用影响都不是很大!但是还是建议使用初始化列表。原创 2024-02-05 14:42:25 · 1153 阅读 · 5 评论 -
C++ : 类的简单介绍(五)————— 拷贝构造函数 & 函数传参 & 运算符重载
又如上图所示,如果进行传值,那么在传值交给拷贝函数的同时,在逻辑上也相当于是传值调用了拷贝构造函数,而C++的传值原理就是要把传递的数值先给到构造函数。于是乎就有了一种现象,一个数值在传递给拷贝构造之前,要先进入另一个拷贝构造函数内部进行拷贝,然后传回返回值,但是在进入另一个拷贝构造函数前,上面的现象又会出现,而这种现象就是无穷递归。原创 2024-02-01 16:21:53 · 1124 阅读 · 33 评论 -
C++ : 类的简单介绍(四)——析构函数
析构函数的功能类似于 栈、链表、队列的distroy的功能,用来进行内部空间的清理和释放,而于这些数据结构的distory 功能不同,在有了析构函数栈之后,这些数据结构,就不需要再写distorty 因为析构函数会在这是变量结束后自动进入清理模式。5.编译器默认生成的析构函数和构造函数一样,不会处理内置类型,对于自定义类型会去它们的内部调用它们的析构函数。与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由 编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。原创 2024-01-31 16:20:03 · 269 阅读 · 5 评论 -
C++: 类的简单介绍(三)———构造函数的初步认识
就如上面代码所示,图中没有构造函数的出现,编译器自己生成了一个构造函数,而后主函数内定义了一个构造函数 对象 d1 ,d1调用了成员函数 print ,而print 内部的内置类型函数,被编译器生成的默认构造函数赋予了一堆乱七八糟的随机值。在不写构造函数的时候,定义了一个构造函数的对象,同时编译器会自动生成一个默认的构造函数,同时调用了使用对象调用 成员函数 而得到的反馈缺是一堆随机值,就如下图的代码所示。默认的构造函数总共有三种:全缺省构造函数,无参数构造函数,因为没有构造函数编译器自己生成的构造函数。原创 2024-01-31 16:03:04 · 498 阅读 · 0 评论 -
C++ :类的简单介绍(二) ——this指针
对于上述类,有这样的一个问题: Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函 数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?根据之前的博文,我们得知了类中的成员函数是处在一个公共的区域,类中的成员变量仅仅只是声明,只有在主函数内部定义了 以类为类型的变量,才算是开辟了成员变量的空间。同时,在成员函数内部的成员变量,也同类中的成员变量一样,仅仅只是一个声明。原创 2024-01-31 15:12:38 · 495 阅读 · 1 评论 -
C++:类 的简单介绍(一)
/类:类体:由成员函数和成员变量组成// 一定要注意后面的分号//其实和结构体的定义差不多//结构体:struct tagclass为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分 号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者 成员函数。1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内 联函数处理。原创 2024-01-28 17:38:25 · 1928 阅读 · 27 评论 -
C++:auto 关键字 & 范围for
于是就有了auto关键字,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。2、当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译 器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。5、虽然在最新版本的C++中,auto可以作为返回值的返沪类型使用,但是还是不太建议使用auto作为返回类型的。1. for循环迭代的范围必须是确定的。原创 2024-01-28 16:30:13 · 1064 阅读 · 17 评论 -
C++: 内联函数
因为宏的本质上是替换,所以对于需要替换的内容十分的严谨,倘若一步错,则步步错,所以对于宏而言,内联函数其实是更加完善的,可以说内联函数其实是完善了宏的问题,解决了宏的缺点。实际上,内联函数使用的场景并不是很多,很多时候内联函数只是也只能使用在较为小型的函数当中,如果是较为大型或者调用函数的次数非常多时,内联函数就会导致函数膨胀问题的发生!以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。原创 2024-01-28 15:46:11 · 1031 阅读 · 20 评论 -
C++:引用
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。如上代码所示,引用符是&,但是要和C语言中的&区分,如上代码就第一个&是c++的,而第二个是C语言的 ,且我们开辟了一个空间,它叫做a ,同时他又叫做b,二者的空间地址都是一样的。取别名的同时还可以给别名取别名!这就相当于把李逵叫铁牛的同时,又把李逵叫做黑旋风。原创 2024-01-27 15:35:56 · 773 阅读 · 10 评论 -
C++:缺省参数&函数重载
而后通过Linux的翻译工作原理我们可以知道,编译器在执行代码之前会执行四个步骤,分别是:预处理、编译、汇编、链接。其中,在预处理阶段,函数定义中包含的头文件,会将头文件的内容完全展开并复制在定义代码的上方。其次,在链接阶段,函数定义中的代码会变成一串机器代码以便编译器进行执行,而这一串机器代码在形成的过程中会将这一大串代码的首个元素的地址,发送到一共特点的函数中,最后这个函数同样会形成一个地址,发送到函数声明中,由函数声明调用。原创 2024-01-25 15:48:29 · 1086 阅读 · 14 评论