C++中new bool**、new bool*、new bool初始化区别及邻接矩阵实现疑问
C++邻接矩阵中两行指针分配语句的区别
你贴的代码里两行new语句层级完全不同,作用差异如下:
- 第一行
adjMatrix = new bool*[numVertices];
这行分配的是一个元素为bool*类型的指针数组,数组长度等于顶点数numVertices。你可以把这个数组理解为邻接矩阵的「行索引表」,每个位置adjMatrix[i]将来要存储第i行邻接数据的首地址。这一步只是给索引表本身分配了空间,还没有分配实际存布尔值的空间。 - 第二行
adjMatrix[i] = new bool[numVertices];
这行放在循环内,每次执行都分配一个元素为bool类型的一维数组,数组长度同样等于顶点数numVertices,这个数组就是邻接矩阵第i行的实际数据存储区,每个位置存的是顶点i和顶点j之间是否有边的布尔值。赋值操作相当于把第i行数据的首地址写入之前创建的行索引表的第i个位置。
补充说明:C++中没有原生的动态二维数组,这种二级指针的实现逻辑是「先存每一行的地址,再给每一行单独分配数据空间」,所以你后续可以直接用adjMatrix[i][j]的方式访问第i行第j列的邻接值,编译器会自动完成两次地址寻址:先从adjMatrix找到第i个行指针,再从行指针的位置偏移j个单位拿到对应布尔值。
内容的提问来源于stack exchange,提问作者Muditx
相关产品推荐
相关产品推荐

