C++中易混的点
·
C++中易混的点
一、前言
整理了几个我的易错点,大家共勉~
二、易错点
-
define和typedef的区别特性 definetypedef本质 无脑替换(不管语法) 定义类型别名(遵循C++语法) 处理阶段 编译之前(预处理) 编译时期 例子 define PI 3.1415926typedef int element -
复合逻辑表达式的结果是
True或False,不是0或1。// 复合逻辑表达式 a % b == 0 && c * c > a + b * b -
关于
sizeof,size,strlen,lengthsizeof:求数据类型和表达式结果所占用的内存大小const char *message = "C++ Programming!"; int a = sizeof(message); // 8 // message是指针,这里本质是求指针的内存大小size:返回字符串/容器的长度,不包括\0。const char *message = "C++ Programming!"; int a = message.size(); // 16strlen:返回字符串的有效,也不包括\0const char *message = "C++ Programming!"; int a = strlen(message); // 16length:和size几乎是等价的唯一一点是:
size适合STL的所有容器;length主要是std::string -
关于二叉树的一个性质(难记)
注意:一定是二叉树的性质昂~
先展示结果:``度为0的节点数 = 度为2的节点数 + 1`
阐释:
注:下标表示度,n表示节点个数。
-
n = n0 + n1 + n2这个很好理解了,总节点数就是度为0的节点数+度为1的节点数+度为2的节点数
-
n = n1 + 2 * n2 + 1首先,1根线连着1个节点(像1个棒棒糖)。
度为1的节点可以引出1个棒棒糖
度为2的节点可以引出2个棒棒糖
再加上1个根节点(只有它是无根之“花”)
这些都加起来就是总节点数
// 简单约分一下,就得到性质本质啦~
-
-
关于
*p*p从我接触时开始,理解上总是不深刻,这次应该可以了#include <iostream> using namespace std; int main() { int a = 5; int* p = &a; // *p中*表示指针声明符,目的是声明p是指向变量a的指针 *p += 5; // *p中*表示解引用运算符,目的是获取p所指向的内存地址中的值 // 可以对其进行修改,并且是有效修改 cout << a << endl; return 0; } -
大根堆
大根堆和小根堆的本质区别在于:大和小。这里以大根堆为例进行讲解。
大根堆阐释:
- 大:元素的大小(以大为主)
- 根:根节点就是最大值
- 堆:这里的堆表示一种特殊的完全二叉树,特殊之处在于:满足特定的排序性质
如图:
30 / \ 20 15 / \ / \ 10 8 12 // 数组存储:[30, 20, 15, 10, 8, 12] 层次遍历当对该树进行插入/删除操作时,永远要遵循一个约定:根节点就是最大值
以插入为例,步骤:
- 待插入元素放在末尾
- 为了满足性质,对树的结构不断进行改变:上浮。将待插入元素和根节点不断进行比较,如果比根节点大的话,就和根节点交换位置,就像是不断上浮
- 直到比根节点小,结束
最终结果:
// 向堆中插入25 30 / \ 20 15 / \ / \ 10 8 12 25 // 15和25比较,15 < 25,交换 30 / \ 20 25 / \ / \ 10 8 12 15 // 得到最终结果:[30, 20, 25, 10, 8, 12, 15]
三、小结
阶段性写一写,最近事情比较多,浅浅整理一下~
更多推荐



所有评论(0)