- 博客(21)
- 收藏
- 关注
原创 学习笔记—C++—vector
摘要:本文详细介绍了C++ STL中的vector容器实现。vector是一个动态数组,支持随机访问和自动内存管理。文章分析了vector与string的区别,重点阐述了vector的底层结构(使用三个指针管理内存)和核心接口实现,包括构造函数、拷贝构造、析构函数、迭代器、容量管理(resize/reserve)以及修改操作(push_back/pop_back/insert/erase)。特别强调了深拷贝实现和迭代器失效问题,并提供了完整的类模板实现代码。通过命名空间封装,实现了与STL兼容的vector
2025-11-30 20:00:54
1187
4
原创 学习笔记—双指针算法—移动零
dest:指向坐标为-1的位置,在处理过的区间内,非零元素的最后一个位置,把处理过的区间分为非零区间和零区间。遇到非0元素,dest++,dest与cur交换,cur++cur:指向坐标为0的位置,从左往右扫描数组,遍历数组。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。创建两个指针dest,cur。给定一个数组 nums。,编写一个函数将所有。遇到0元素,cur++
2025-04-27 18:21:36
604
4
原创 学习笔记—C++—string(一)
为什么学习string的类● C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。● 在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数● string是一个管理字符数组的类
2025-04-20 18:57:43
2295
11
原创 学习笔记—C++—模板初阶
使用函数重载虽然可以实现,但是有一下几个不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。2. 代码的可维护性比较低,一个出错可能所有的重载均出错。如果在C++中,也能够存在这样一个,通过给这个模具中,来,那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。
2025-04-16 19:22:13
1011
19
原创 学习笔记—C++—内存管理
目录C/C++内存管理C/C++内存分布C语言中动态内存管理方式:malloc/calloc/realloc/freeC++内存管理方式new/delete操作内置类型new和delete操作自定义类型operator new与operator delete函数new和delete的实现原理内置类型自定义类型定位new表达式(placement-new)malloc/free和new/delete的区别● 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。●内存映射段是高效的I/O映射方式,
2025-04-13 20:07:03
1411
4
原创 学习笔记—C++—类和对象(三)
● 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有⼀种方式,就是初始化列表,初始化列表的使用方式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后面跟⼀个放在括号中的初始值或表达式。●每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。●引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错。●C++11支持在成员变量声明的位置给缺省
2025-04-13 16:35:46
1244
9
原创 学习笔记—C++—类和对象(2)
默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解⼀下即可。其次就是C++11以后还会增加两个默认成员函数,移动构造和移动赋值,这个我们后面再讲解。默认成员函数很重要,也比较复杂,我们要从两个方面去学习:
2025-04-09 21:25:43
982
5
原创 学习笔记—C++—类和对象(一)
● class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。● 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。● C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是
2025-04-06 20:04:08
1305
7
原创 学习笔记—C++—入门基础()
C++”是一种多功能的编程语言,它起源于1980年代初,由Bjarne Stroustrup在C语言的基础上发展而来。C++最初被设计为支持面向对象编程的C语言变体,后来经过多次迭代和标准化,发展成为一种广泛应用于系统软件、游戏开发、嵌入式系统等领域的语言。C++的发展经历了多个重要阶段,包括C++98、C++03、C++11、C++14、C++17、C++20和即将到来的C++23标准.定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。
2025-04-05 19:08:02
2547
原创 学习笔记—数据结构—排序
目录排序的概念及运用常见的运用衡量排序标准常见排序的实现算法插入排序直接插入排序代码实现复杂度希尔排序代码实现复杂度选择排序直接选择排序编辑代码实现复杂度堆排序代码实现复杂度交换排序冒泡排序代码实现复杂度快速排序hoare版本代码实现挖坑法代码实现lomuto前后指针编辑代码实现非递归版本代码实现复杂度归并排序代码实现复杂度非比较排序计数排序代码实现复杂度总结复杂度希尔排序希尔排序是一种基于插入排序的算法,它通过引入增量序列,采取分组排序策略:将大数组分为若干个子序列,对每个子序
2025-04-02 20:39:00
2734
10
原创 学习笔记—数据结构—二叉树(链式)
/定义二叉树链式结构//二叉树结点的结构//值域//左孩子//右孩子}BTNode;//前序遍历//中序遍历//后续遍历// 二叉树结点个数// 二叉树叶子结点个数// 二叉树第k层结点个数// 二叉树的深度/高度// 二叉树查找值为x的结点// 二叉树销毁//层序遍历---借助数据结构(队列)//判断二叉树是否为完全二叉树。
2025-03-27 20:43:50
1285
3
原创 学习笔记—数据结构—二叉树顺序实现(小堆)
1.满二叉树是一种特殊的二叉树,它的特点是每一层的节点数都达到最大值,即每一层的节点数都恰好为2的幂次(除了最后一层以外)。2.如果满二叉树的深度为k,那么它的节点总数为2^k - 1。在满二叉树中,除了最后一层的节点之外,其余每一层的节点都是完全填满的,而且最后一层的节点也是从左到右连续排列的除了最后一层外,其他每一层的节点数都达到最大数量,即该层的节点数等于2的幂减去1。最后一层的节点都集中在最左边,并且右边的节点可以少,但不能有空位。堆是一种特殊的完全二叉树,它可以被视为一种特殊的顺序表。
2025-03-25 21:25:28
891
4
原创 学习笔记—数据结构—栈和队列(练习题)
对于咱们对编程有兴趣或者成为陌生手段来说,刷题一般用牛客网和力扣牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网力扣 (LeetCode) 全球极客挚爱的技术成长平台。
2025-03-20 20:57:59
1197
5
原创 学习笔记—数据结构—栈和队列
栈:⼀种特殊的线性表,只允许在固定的⼀端进行插入和删除元素操作。进行数据插⼊和删除操作 的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO()的原则。栈顶:能进行进栈(插入)和出栈(删除)操作。栈底:固定的,不能进行任何操作。空栈:没有任何元素,栈顶=栈底。队列:只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有先进先 出FIFO(允许插入的一端称为队尾,允许删除的一端称为队头。队头:进行删除的一端,又称队首。队尾:进行插入的一端。空队列。
2025-03-19 11:33:45
945
3
原创 学习笔记—数据结构—双链表
双链表又称带头双向循环链表,它是一种特殊的数据结构,它结合了双向链表和循环链表的特点。在双链表中,每个节点除了拥有指向下一个节点的指针外,还拥有指向上一个节点的指针。此外,列表的头节点和尾节点通过这些指针相互连接,形成一个闭环。这种结构允许从任何一个节点开始,既可以向前遍历,也可以向后遍历,直到回到起点,从而实现高效的双向遍历。每个节点包含数据部分和两个指针部分,分别指向前一个节点和后一个节点。头节点是双向循环列表的起始点,它的前驱指针指向自己,后继指针也指向自己,形成一个闭环。
2025-03-18 10:16:05
815
2
原创 学习笔记—数据结构—单链表(练习题)
对于咱们对编程有兴趣或者成为陌生手段来说,刷题一般用牛客网和力扣牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网力扣 (LeetCode) 全球极客挚爱的技术成长平台。
2025-03-17 14:54:20
1446
2
原创 学习笔记—数据结构—单链表
单链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据部分和一个指向下一个节点的指针。在单链表中,每个节点的地址不一定是连续的,而是通过指针相互链接起来。单链表的特点是存储灵活,可以动态地添加或删除节点,不需要预先分配固定大小的存储空间。
2025-03-16 16:03:11
965
3
转载 学习笔记—数据结构—顺序表
顺序表是一种线性表的存储结构,它使用一组地址连续的存储单元依次存储线性表的数据元素。在顺序表中,逻辑上相邻的元素在物理存储上也相邻,通常采用数组来实现这种存储方式。●随机访问:可以通过首地址和元素序号在常数时间内找到指定的元素。●存储密度高:由于每个结点只存储数据元素,没有额外开销,因此存储密度较高。●物理位置相邻:物理位置和逻辑位置一致,保持相邻,但这也意味着插入和删除操作可能涉及到大量元素的移动。顺序表主要分为动态和静态,由于静态局限性,在这主要实现动态顺序表。动态顺序表主要运用。
2025-03-16 10:21:34
572
3
转载 学习笔记—数据结构—时间(空间)复杂度
众所周知:程序 = 算法 + 数据结构;衡量一个算法的标准就是算法效率。那么,算法效率是指算法执行的时间和所需的存储空间。在计算机科学中,算法效率通常通过时间复杂度和空间复杂度来衡量。
2025-03-15 18:19:57
1145
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅