
数据结构
文章平均质量分 54
云飞扬_Dylan
这个作者很懒,什么都没留下…
展开
-
C++数组名和指针的区别
数组名是个地址常量,指向数组首元素的地址:char attr[10];对于上面的数组,attr == &attr == &attr[0], 都等于这个数组首元素的地址。sizeof(attr)是整个数组的长度。当attr作为函数参数的时候或者用attr来访问数组内元素的时候,会进行隐式转换,转换为指针常量,并指向数组首地址(其实当需要执行这段程序时,相应的数据会被加载到内存,此时内存会保留一份这样的指针常量),当访问数组元素时,就是在指针常量的基础上进行偏移。char原创 2022-03-21 11:38:48 · 1544 阅读 · 0 评论 -
零长度数组创建可变结构体
在阅读代码的时候发现,发现有的结构体末尾为附加一个0长度或者1长度的数组。其实这是一个小技巧,用这种方法可以实现变长结构体。变长结构体通常在网络通信中的报文头中比较常见。struct Extra{ int m_ext;};struct Header{ int m_data; int m_size; char extra[0];};如上所示,struct Header的最后一个字段是长度为零的char类型数组。这个数组有什么用呢?实际上它被用来表示一个地址,这个地址指向Header原创 2022-03-21 11:09:04 · 352 阅读 · 0 评论 -
C++中的字节对齐
一、字节对齐的定义计算机在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。二、对齐的作用和原因:1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这原创 2021-02-07 14:14:14 · 1541 阅读 · 0 评论 -
树状数组介绍(简单易懂的原理讲解)
树状数组又称为Binary Indexed Tree(BIT)或者FenWick Tree树状数组可以解决什么样的问题:这里通过一个简单的题目展开介绍,先输入一个长度为n的数组,然后我们有如下两种操作:输入一个数m,输出数组中下标1~m的前缀和 对某个指定下标的数进行值的修改多次执行上述两种操作寻常方法对于一个的数组,如果需要求1~m的前缀和我们可以将其从下标1开始对m个数进行求和,对于n次操作,时间复杂度是O(n^2),对于值的修改,我们可以直接通过下标找到要修改的数,n次操作时间复转载 2020-08-25 10:27:11 · 2108 阅读 · 1 评论