STL之vecor的使用(超详解) 如果发生的异地扩容,这时的迭代器就不在指向原来的空间,而就指向一块释放的内存,我们一旦继续访问就会报错,这种现象我们称为迭代器失效。指定位置插入,要注意的是这里不再像string一样,用的size_t 的pos,vector虽然也可以用下标访问,但是为了承接后面STL其他不支持下标访问的容器,所以这边的pos用的是迭代器类型。下面我们开始研究他的使用,为了能够更好的测试,我们先实现一个打印容器元素的函数,vector底层是数组,所以有三种访问方式:下标访问、迭代器访问、范围for(本质也是迭代器)
日期类的模拟实现(超详解) 1. 项目功能.2. 功能实现2.1 构造函数与拷贝构造与赋值重载,析构函数2.2. 两个日期之间的比较2.4. 日期自增与自减2.5.两日期相减2.6流输入与流输出。3. 完整代码3.1. Date.h3.2. Date.cpp4.代码运行
C++内存管理(超详解) 1. C/C++的内存分布2.回顾C语言中的动态内存管理3. C++中的内存管理3.1. new与delete操作内置类型3.2. new与delete操作自定义类型3.4. new与delete的实现3.5. 定位new表达式4.malloc/free和new/delete的区别
超详解C++类与对象(下) 1. 初始化列表1.1. 定义2.2. 注意2.隐式类型转换2.1. 内置类型2.2. 自定义类型2.3. explicit关键字3.类的静态成员2.1. 定义2.2. 注意4.const成员函数5. 友元5.1友元函数5.2. 友元类6. 内部类6.1. 定义6.2. 注意7. 匿名对象7.1匿名对象7.2延长生命周期的匿名对象
【探索数据结构与算法】树与二叉树上篇(图文详解) 树是一种非线性的数据结构,它是由n(n >= 0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。在树中有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1 <= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继因此,树是递归定义的。注意:树形结构中,子树之间不能有交集,否则就不是树形结构。
【探索数据结构与算法】选择排序:原理、实现、优化与分析(图文详解) 在众多排序算法中,选择排序以其简洁直观的特点而著称。尽管在效率上不是最优的,特别是对于大规模数据集而言,但选择排序的算法思想却蕴含着深刻的逻辑和广泛的应用场景。通过不断选择剩余元素中的最小(或最大)元素,并将其放置到序列的起始位置,选择排序以一种简单而直接的方式完成了数据的排序。
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解) 因此,第i个元素需要比较i次(其中i从2开始,直到n),总共需要进行的比较次数大约为1 + 2 + 3 + ... + (n-1) = n(n-1)/2,时间复杂度为O(n^2)。当输入数组已经是排序状态时,插入排序的性能最优。插入排序是一种原地排序算法,它只需要一个额外的存储空间来暂存当前需要插入的元素(即“key”),而不需要额外的数组来存储排序过程中的数据。在插入排序过程中,如果两个相等的元素,后面的元素不会移动到前面元素的前面,而是直接插入到与它相等的元素之后,从而保持了原有的相对顺序。
掌握C语言文件操作 磁盘上的文件就是文件。然而在程序设计中,我们所谈的文件有两种,一种是程序文件,另一种是数据文件(从文件功能的角度来分类的)文件名一个文件要有一个唯一的文件标识,以便用户识别和引用,这就是文件名⽂件名包含3部分:⽂件路径+⽂件名主⼲+⽂件后缀程序文件与数据文件。
【探索数据结构与算法】堆的具体实现和应用 目录一.堆的基本概念二.堆的结构定义 三.堆的接口实现 1.初始化2.销毁 3.向上调整算法(重要) 4.入堆 5.向下调整算法(重要) 6.出堆 7.取堆顶元素 8.对堆判空 9.获取堆的数据个数 四.C语言实现堆的完整代码 Heap.h Heap.c test.c 堆排序:数据流中的TopK问题: 堆的特性数组与堆的关联 为什么选择数组?注意:我们只是把数组在逻辑上想象成了抽象的堆,其实它本质上就是数组 数组与堆的映射关系(重要) 堆的结构定义与顺序表基本是一致的,这也更说明了堆的概