- 博客(21)
- 收藏
- 关注
原创 C++ 模版进阶【非类型模板参数、模板特化等】
【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误再见~
2024-08-19 17:56:42
768
原创 C++ stack、queue、priority_queue【介绍、常用接口、模拟实现】
deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和 删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。
2024-08-17 20:28:16
982
原创 C++ list【常用接口、模拟实现等】
1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3.list与forward_list非常相似,最主要的不同在于forward_list是单链表,只能朝前迭代,让其更简单高效。4.与其他的序列式容器相比(array,_vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。
2024-08-13 21:46:21
1187
原创 C++ vector【常用接口、迭代器失效问题、模拟实现等】
1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小 为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。
2024-08-08 20:24:21
952
原创 C++ string类(你想要的这里都有)
(范围for底层也是使用迭代器实现)(若对于隐藏的this指针不清楚的,可以看下链接的“5.赋值运算符重载”)C++类和对象(中)(构造、析构、拷贝、赋值重载、const成员函数)_c++ const 结构体 拷贝-CSDN博客
2024-07-28 17:29:57
868
原创 C++模版初阶
类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<> 中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。好了今天就到这里啦,下次见~如果帮到你我很荣幸~若有错误欢迎指正批评~~~
2024-07-23 21:50:23
557
原创 C/C++内存管理
①②根据①和②的代码截图可以看出,使用C语言的malloc和free,只会申请和释放空间,不会自用构造和析构函数。而使用new和delete,除了申请空间和释放空间外,会自动调用构造和析构函数。【初始化】【匿名对象】new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理。
2024-07-19 22:23:55
594
原创 C++类和对象(下)【初始化列表、explicit关键字、Static成员、友元、内部类】
(且该自定义类型成员没有默认构造函数(默认构造函数包含:全缺省构造、无参构造、系统自动生成的构造函数))3.尽量使用初始化列表初始化,初始化列表不管写不写,成员变量都会走一遍列表,再走函数体。同时也可以避免上述的引用类型成员变量、const成员变量、没有默认构造函数的自定义类成员变量初始化时写错位置。4.成员变量在类中声明顺序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后顺序无关。下图中对成员变量的声明顺序,进行了调换,所以_a1和_a2的结果都为5。
2024-07-14 09:35:40
1020
原创 C++类和对象(中)(构造、析构、拷贝、赋值重载、const成员函数)
方法一:提供get,set方法,细心的小伙伴应该已经发现,我在上面的例子中已经有使用get方法了。get、set方式,如果学过java的伙伴就比较熟悉了。方法二:友元(很下面会讲,马上就想知道的伙伴可以马上冲浪一下~~)。方法三;将这个定义在类外的函数重载成成员函数。前面不是说必须有一个类类型参数吗?这边怎么没有呢?在解释这个为什么之前我们讲一个别的东西。调用这个类型的函数的方式有两种(如下图)。
2024-05-20 23:19:50
1914
原创 C++类和对象(上)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。什么是类?比如人,这就是一个类;五官、四肢、躯干是人的属性(成员属性);这个人能干什么,会什么技能,是这个人的成员函数拥有上述相同属性和技能的人很多,可以具体到某个人,比如说王某明(也就是实例化出一个对象)
2024-05-12 20:07:34
1516
1
原创 C++范围for循环
以往我们使用for循环都是这样的(上图)虽然已经很简单了,但是我们在对于一个有范围的集合而言,特意说明循环范围显得十分的多余,有时还会给错范围,导致错误。于是C++中引入了基于范围的for循环。for循环的括号由冒号“:”分成两个部分,第一个部分是范围用于迭代的变量,第二个部分则表示被迭代的范围。注意:与普通循环类似,可以使用continue来结束本次循环,也可以用break来跳出整个循环。
2024-05-06 23:38:12
295
原创 C++auto关键字
C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。(typeid这个可以查看变量类型)使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推到auto的实际类型。
2024-05-06 16:35:44
396
原创 C++内联函数
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。没有使用内联函数调用函数的时候,在底层汇编有一个"call',表示对函数进行调用。(如下图所示)如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。
2024-05-04 17:34:00
322
1
原创 C++引用(超级无敌详细版)
但是如果执行“int& rd=d”的话,产生了一个临时变量的常量,常量的权限是只读不可写,但是此时rd的权限是可读可写,产生了权限放大的问题,所以出现了报错。(老婆饼,是一个美好的想象,感觉吃到了幸福,其实老婆饼不是老婆做的,老婆饼里面也没有老婆。因为例子中的a为常量,a的权限只读,而ra的权限是可读可写的,ra身为a的引用,权限不能比a大,产生了权限放大的问题,所以出错。例子中的x为常量,x的权限可读可写,z的权限是只读的,z身为x的引用,z权限没有比x大,所以运行成功。(在下图中,也是错误的,请注意)
2024-05-03 18:06:11
1839
原创 C++函数重载
C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。(ps:如果对函数修饰规则有兴趣的话,可以再多多学习一下。如果对你有帮助的话,我深感荣幸~
2024-04-29 15:09:55
215
原创 c++中的缺省参数
缺省参数的概念缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。缺省参数的分类1.全缺省参数2.半缺省参数注意:1. 半缺省参数必须从右往左依次来给出,不能间隔着给2. 缺省参数不能在函数声明和定义中同时出现3. 缺省值必须是常量或者全局变量4. C语言不支持(编译器不支持)如果帮助到你了,我会很开心o~欢迎指正批评!下次见~
2024-04-29 00:57:35
130
原创 C++输入&输出
② using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对 象/函数,就存在冲突问题。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 + using std::cout展开常用的库对象/类型等方式。早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;(不包含using namespace std;
2024-04-29 00:19:11
349
1
原创 希尔排序——你真的会了吗?(排序系列二)
1. 希尔排序是对直接插入排序的优化。2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就 会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
2024-04-27 17:39:10
145
原创 插入排序的超详细解析!(排序系列一)
排序概念插入排序当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与 array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1),它是一种稳定的排序算法4. 稳定性:稳定。
2024-04-27 00:27:26
294
1
原创 别看,浪费时间~你要是很闲的话,当我没说~
Hello,大家好,目前我是一名计算机的学习者。后续呢,会分享一些自己感觉有意思的东西,希望能得到大家的指点,也希望能给你帮助。一次简单的会面,相信后面的我们会经常遇见。
2023-10-10 22:40:15
47
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人