当前位置: 首页 > news >正文

C/C++数据结构之多维数组

概述

        多维数组,实际上就是“数组的数组”。最常见的是二维数组,就像一个表格,拥有行和列。而三维数组则可以想象为多个这样的表格堆叠起来形成的一个立方体。依此类推,我们可以构建四维、五维甚至更高维度的数组。

        多维数组主要用于表示具有多个属性的数据集合。在计算机图形学中,图像可以被视为二维像素矩阵。在科学计算中,物理场可能需要三维数组来表示。另外,棋盘类游戏中的棋盘通常是一个固定大小的网格,实际上也是一个多维数组。比如:国际象棋的棋盘是一个8 x 8的网格,可以用二维静态数组来表示。

声明与初始化

        我们以二维数组为例,来说明如何进行声明与初始化。声明一个多维数组,首先需要明确指定数组的类型和每个维度的尺寸。声明格式通常如下:

                type arrayName[size1][size2];

        其中,type代表数组中元素的数据类型(比如:int、float等),而size1和size2则是在编译期可以确定的一个常量值或常量表达式,表示数组在一维和二维分别能够容纳的元素个数。比如:要声明一个3 x 4的二维数组,可以写为如下代码。

int paNumber[3][4];

        其中,paNumber是一个包含3个元素的数组,每个元素本身又是一个包含4个整数的数组。

        在声明二维数组的同时,还可以对二维数组进行初始化。初始化时,可以按照维度直接给出所有元素的值,形式如下。值得注意的是,如果省略某些值,默认它们会被设置为0。

int paNumber[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}
};

        访问二维数组中的某个元素,可以通过两个连续的下标运算符[]实现,其语法格式如下:

                arrayName[index1][index2];

        其中,index1和index2是从0开始计数的位置索引,index1不能大于size1,index2不能大于size2。比如:有一个名为paNumber的整型数组,想要获取第二行第三列元素的值,可以写作paNumber[1][2]。

动态分配

        有时候,我们需要根据程序运行时的变量值动态创建多维数组,而不是在编译时就确定其大小。此时,可以使用指针和new来实现。

        在下面的示例代码中,这段代码首先创建了一个指向指针数组的指针ppMatrix(即二维数组),然后为每一行分配了足够的内存空间来存储列元素。

int nRows = 3;
int nCols = 4;
// 创建行指针数组
int** ppMatrix = new int*[nRows];
for(int i = 0; i < nRows; ++i)
{// 为每一行分配空间ppMatrix[i] = new int[nCols];
}

        需要注意的是,动态分配内存后,我们必须释放这些资源,以防止内存泄漏。

for(int i = 0; i < nRows; ++i)
{// 释放每一行的内存delete[] ppMatrix[i];ppMatrix[i] = NULL;
}// 最后释放行指针数组的内存
delete[] ppMatrix;
ppMatrix = NULL;

http://www.lryc.cn/news/586915.html

相关文章:

  • MySQL实操:将Word表格数据导入MySQL表
  • 导入 SciPy 的 io 模块
  • 基于Springboot+UniApp+Ai实现模拟面试小工具三:后端项目基础框架搭建上
  • 在人工智能自动化编程时代:AI驱动开发和传统软件开发的分析对比
  • ECU(电子控制单元)是什么?
  • Hashtable 与 HashMap 的区别笔记
  • LeetCode|Day9|976. 三角形的最大周长|Python刷题笔记
  • 代码部落 20250629 CSP-S复赛 模拟赛
  • 代码随想录算法训练营第十八天
  • 攻防世界——Web题 very_easy_sql
  • 解析磁盘文件系统
  • 面试150 从中序与后序遍历构造二叉树
  • 手写std::optional:告别空指针的痛苦
  • HTTP与HTTPS详解
  • 20250713 保存 PGM / PPM 图片 C++
  • COZE token刷新
  • 一文读懂现代卷积神经网络—使用块的网络(VGG)
  • 2025江苏省信息安全管理与评估赛项二三阶段任务书
  • 改进后的 OpenCV 5.x + GStreamer + Python 3.12 编译流程(适用于 Orange Pi / ARM64)
  • 3.7 ASPICE的问题解决与改进过程
  • Linux-网络管理
  • iTestin 自动化录制工具
  • Kimi K2深度解析:开源万亿参数大模型,复杂场景能力强悍,为AI Agent而生!
  • Vision Kit之文档扫描
  • 【PyMuPDF】PDF图片处理过程内存优化分析
  • 论文Review 3DGSSLAM GauS-SLAM: Dense RGB-D SLAM with Gaussian Surfels
  • kettle从入门到精通 第102课 ETL之kettle xxl-job调度kettle的两种方式
  • 归并排序递归法和非递归法的简单简单介绍
  • 三种网络类型
  • X00211-基于残差edge-graph注意力机制的深度强化学习优化车辆路径问题