随笔分类 -  C/C++

摘要:什么是RAII? RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源、避免泄漏的惯用法。 RAII又叫做资源分配即初始化,即:定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资 阅读全文
posted @ 2016-07-26 01:40 ProLyn 阅读(2226) 评论(0) 推荐(4) 编辑
摘要:大家都知道如下代码中,被const限定的a是不可以被直接修改的 void main() { const int a = 3; a=1; } 在C++中const修饰的常量,不能被直接修改,但是可以通过指针进行间接修改 来看下面的例子: 运行后输出 5 3 单步执行,利用内存窗口进行查看,未修改前a为 阅读全文
posted @ 2016-07-20 22:39 ProLyn 阅读(4781) 评论(1) 推荐(0) 编辑
摘要:红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black。 通过对任何一条从根到叶子节点简单路径上的颜色来约束树的高度,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。 红黑树是满足下面红黑性质的二叉搜索树: 1. 每个节点,不是红色就是黑色的 2. 阅读全文
posted @ 2016-07-08 16:50 ProLyn 阅读(3192) 评论(0) 推荐(2) 编辑
摘要:AVL树是高度平衡的二叉搜索树,按照二叉搜索树(Binary Search Tree)的性质,AVL首先要满足: 若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。 AVL树的性质: 阅读全文
posted @ 2016-07-07 16:22 ProLyn 阅读(7903) 评论(2) 推荐(3) 编辑
摘要:用例: 将一组数据从大到小进行排列 10, 16, 18, 12, 11, 13, 15, 17, 14, 19 size=10 步骤1.根据数组初始化堆中的数据(无序堆) 步骤2.从最后一个根节点( 下标为(size-1-1)/2 )开始往第一个根节点遍历,依次将每个最小子树排好序,建造一个小堆: 阅读全文
posted @ 2016-06-24 22:17 ProLyn 阅读(789) 评论(0) 推荐(0) 编辑
摘要:语句格式: for(表达式1;表达式2;表达式3) { 循环体 } 表达式1:赋值表达式,用来给控制变量赋初值。(只执行一次) 表达式2:逻辑表达式,是循环的控制条件,用来判断控制变量是否符合循环条件,是则进入循环体,否则跳出循环。 表达式3:赋值表达式,用来对控制变量进行增量或减量操作。 for循 阅读全文
posted @ 2016-06-21 23:48 ProLyn 阅读(4613) 评论(1) 推荐(1) 编辑
摘要:函数原型: 头文件: 引入: 字符串由'\0'结尾,所以字符串内部不能包含任何'\0'字符('\0'的ASCII值为0),否则我们将读不到'\0'后的字符内容。但是,非字符串内部包含零值的情况并不罕见,我们无法利于其它字符串函数来处理这类数据。所以,我们要引入内存操作的函数来处理。 memcpy m 阅读全文
posted @ 2016-06-17 22:30 ProLyn 阅读(805) 评论(0) 推荐(0) 编辑
摘要:这些常用的字符串操作函数都是包在string.h头文件中。 分享此图,方便大家记忆 <(^-^)> 选中图片点击右键,在新标签页中打开图片会更清晰 阅读全文
posted @ 2016-06-17 21:56 ProLyn 阅读(956) 评论(0) 推荐(1) 编辑
摘要:代码段(.text),也称文本段(Text Segment),存放着程序的机器码和只读数据,可执行指令就是从这里取得的。如果可能,系统会安排好相同程序的多个运行实体共享这些实例代码。这个段在内存中一般被标记为只读,任何对该区的写操作都会导致段错误(Segmentation Fault)。 数据段,包 阅读全文
posted @ 2016-04-30 19:51 ProLyn 阅读(13690) 评论(1) 推荐(5) 编辑
摘要:设一个N*N的方阵A,A中任意元素A[i][j],当且仅当A[i][j] == A[j][i](0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵。 以矩阵的对角线为分隔,分为上三角和下三角。 如上图,对称矩阵压缩存储存储时只需要存储上三角/下三角的数据,一般情况下用 阅读全文
posted @ 2016-04-19 12:52 ProLyn 阅读(5120) 评论(0) 推荐(0) 编辑
摘要:迷宫地形我们可以通过读文件的形式,通过已知入口逐个遍历坐标寻找通路。 文件如图: 每个坐标的位置用结构体来记录: 定义行列范围: 初始化迷宫数组:将通过读文件的方式获取的字符转成整型数据,保存在M行N列的数组中。 回溯查找通路: 利用栈来存储通路,通过上下左右四个方向依次遍历,如果该位置满足条件,就 阅读全文
posted @ 2016-04-18 16:04 ProLyn 阅读(1581) 评论(0) 推荐(0) 编辑
摘要:斐波那契数列:1,1,2,3,5,8,13,21……这个数列从第三项开始,每一项都等于前两项之和。 如果设F(n)为该数列的第n项(n∈N+)。那么菲波那切数列可以概括成如下形式: 简单的递归写法: 非递归循环方法: 这个方法只设置了三个变量,依次循环替换将结果放到数组的第三个变量中。这种方法虽然可 阅读全文
posted @ 2016-04-18 08:09 ProLyn 阅读(6016) 评论(0) 推荐(0) 编辑
摘要:今天敲代码的时候发现了一个BUG和大家分享一下,希望大家下次不要犯和我一样的错误。 如果犯了和我一样的错,也能知道自己错在哪里! <(^-^)> 函数如下:(斐波那契数列的实现) 上面的程序有BUG,如果传给函数的参数是0,程序就会因为触发一个断点而崩溃。 单步调试,根据内存窗口就会发现问题所在! 阅读全文
posted @ 2016-04-18 08:02 ProLyn 阅读(801) 评论(0) 推荐(0) 编辑
摘要:本文旨在通过对 写时拷贝 的四个方案(Copy On Write)分析,让大家明白写时拷贝的实现及原理。 关于浅拷贝与深拷贝,我在之前的博客中已经阐述过了 浅拷贝容易出现指针悬挂的问题,深拷贝效率低,但是我们可以应用引用计数来解决浅拷贝中多次析构的问题,写时拷贝也就应运而生了。 首先要清楚写时拷贝是 阅读全文
posted @ 2016-04-17 12:10 ProLyn 阅读(3427) 评论(0) 推荐(1) 编辑
摘要:深拷贝的现代写法相比传统写法更加简单。也就是建立一个中间对象tmp,它的_str指针指向的内容是s._str的一份拷贝,交换tmp._str和_str后,_str就指向了s._str那份拷贝,出了作用域tmp会自动调用它的析构函数,也就把原先_str指向的内存释放了,同样达到了我们要的效果。 如下图 阅读全文
posted @ 2016-04-16 17:19 ProLyn 阅读(694) 评论(0) 推荐(0) 编辑
摘要:浅拷贝会造成指针悬挂的问题。 举个例子:两个对象是s1和s2的指针_str都指向new开辟的同一块空间,如下图,主程序结束时,对象逐个撤销,先撤销对象s2,会调用析构函数释放动态分配的内存;再撤销对象s1时,s1._str所指向的内存空间已经是无法访问了,而s2._str原先指向的那块内存却无法释放 阅读全文
posted @ 2016-04-16 16:38 ProLyn 阅读(922) 评论(0) 推荐(0) 编辑
摘要:这里建立两个类,一个节点类和一个List类,与单链表不同的是双向链表的节点要多一个前驱指针,相应的,双向链表函数实现要与单链表实现有所差异 阅读全文
posted @ 2016-04-16 14:15 ProLyn 阅读(6231) 评论(0) 推荐(3) 编辑
摘要:单链表的结构有多种 这里介绍的链表有头结点、有尾节点并且尾节点指向头结点 单链表的每个结点的地址存放在其直接前驱结点的指针域中。其中第一个结点没有前驱结点,因此需要一个头指针指向第一个节点,便于我们对整个链表进行操作;这里的单链表的最后一个节点的指针域存放的是头结点的地址。 单链表不能随意存取,必要 阅读全文
posted @ 2016-04-15 19:18 ProLyn 阅读(12315) 评论(1) 推荐(5) 编辑
摘要:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的。只要知道了第一个元素的存储地址,就可以知道线性表中任何一个元素的存储地址。因此,线性表中的任何一个元素, 本文利用C++语 阅读全文
posted @ 2016-04-15 14:16 ProLyn 阅读(1434) 评论(0) 推荐(1) 编辑
摘要:功能:实现日期的简单操作 基本的成员函数:构造函数,拷贝构造函数,析构函数,赋值运算符重载,操作符重载(两个日期间比较大小) 日期类功能函数: 1:计算一个日期加上多少天数后的日期 2:把该日期改为加上指定数目的天数后的日期 3:一个日期减上多少天数后的日期 4:把该日期改为减去指定数目的天数后的日期 5:该日期加1(前置++)(后置++) 6:该日期减1(前置--)(后置--) 7:计算某日期到未来某日期间隔的天数 By :Lynn-Zhang 阅读全文
posted @ 2016-04-14 09:28 ProLyn 阅读(2879) 评论(0) 推荐(2) 编辑

点击右上角即可分享
微信分享提示