跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C++ 二维数组
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C++二维数组 = '''二维数组'''是C++中一种重要的数据结构,它允许开发者以表格形式(行和列)存储数据。与一维数组不同,二维数组可以更直观地表示矩阵、表格或棋盘等结构。 == 定义与声明 == 二维数组的声明语法如下: <syntaxhighlight lang="cpp"> 数据类型 数组名[行数][列数]; </syntaxhighlight> 例如,声明一个3行4列的整型数组: <syntaxhighlight lang="cpp"> int matrix[3][4]; </syntaxhighlight> === 内存布局 === 二维数组在内存中是'''按行连续存储'''的。例如,上述<code>matrix[3][4]</code>的内存布局如下: <mermaid> graph LR A[matrix[0][0]] --> B[matrix[0][1]] --> C[matrix[0][2]] --> D[matrix[0][3]] D --> E[matrix[1][0]] --> F[matrix[1][1]] --> G[matrix[1][2]] --> H[matrix[1][3]] H --> I[matrix[2][0]] --> J[matrix[2][1]] --> K[matrix[2][2]] --> L[matrix[2][3]] </mermaid> == 初始化方法 == 二维数组有多种初始化方式: === 完全初始化 === <syntaxhighlight lang="cpp"> int matrix[2][3] = { {1, 2, 3}, {4, 5, 6} }; </syntaxhighlight> === 部分初始化 === 未指定的元素会自动初始化为0: <syntaxhighlight lang="cpp"> int matrix[2][3] = { {1}, // 第一行:1, 0, 0 {4, 5} // 第二行:4, 5, 0 }; </syntaxhighlight> === 省略第一维大小 === 编译器可以自动推断行数: <syntaxhighlight lang="cpp"> int matrix[][3] = { {1, 2, 3}, {4, 5, 6} }; </syntaxhighlight> == 访问元素 == 通过双重索引访问元素,行和列索引都从0开始: <syntaxhighlight lang="cpp"> int value = matrix[1][2]; // 访问第二行第三列 matrix[0][1] = 10; // 修改第一行第二列 </syntaxhighlight> == 实际案例 == === 案例1:矩阵转置 === 将矩阵的行列互换: <syntaxhighlight lang="cpp"> #include <iostream> using namespace std; int main() { int original[2][3] = {{1, 2, 3}, {4, 5, 6}}; int transposed[3][2]; // 转置操作 for(int i = 0; i < 2; ++i) { for(int j = 0; j < 3; ++j) { transposed[j][i] = original[i][j]; } } // 输出结果 for(int i = 0; i < 3; ++i) { for(int j = 0; j < 2; ++j) { cout << transposed[i][j] << " "; } cout << endl; } return 0; } </syntaxhighlight> '''输出:''' <pre> 1 4 2 5 3 6 </pre> === 案例2:游戏地图 === 用二维数组表示简单的2D游戏地图: <syntaxhighlight lang="cpp"> #include <iostream> using namespace std; int main() { // 0=空地, 1=墙, 2=玩家, 3=宝藏 int gameMap[5][5] = { {1, 1, 1, 1, 1}, {1, 0, 0, 3, 1}, {1, 0, 1, 0, 1}, {1, 2, 0, 0, 1}, {1, 1, 1, 1, 1} }; // 渲染地图 for(int i = 0; i < 5; ++i) { for(int j = 0; j < 5; ++j) { switch(gameMap[i][j]) { case 0: cout << " "; break; case 1: cout << "#"; break; case 2: cout << "P"; break; case 3: cout << "T"; break; } } cout << endl; } return 0; } </syntaxhighlight> '''输出:''' <pre> ##### # T# # # # #P # ##### </pre> == 高级主题 == === 动态二维数组 === 对于需要在运行时确定大小的二维数组,可以使用指针数组: <syntaxhighlight lang="cpp"> int rows = 3, cols = 4; int** dynamicMatrix = new int*[rows]; for(int i = 0; i < rows; ++i) { dynamicMatrix[i] = new int[cols]; } // 使用后记得释放内存 for(int i = 0; i < rows; ++i) { delete[] dynamicMatrix[i]; } delete[] dynamicMatrix; </syntaxhighlight> === 多维数组的数学表示 === 二维数组可以表示数学中的矩阵。例如矩阵乘法: 给定两个矩阵<math>A_{m×n}</math>和<math>B_{n×p}</math>,其乘积<math>C_{m×p}</math>的元素计算为: <math> c_{ij} = \sum_{k=1}^{n} a_{ik} \times b_{kj} </math> == 常见问题 == '''Q: 二维数组和数组的数组有什么区别?''' A: 在C++中,二维数组本质上就是数组的数组。例如,<code>int arr[3][4]</code>是一个包含3个元素的数组,每个元素又是一个包含4个整数的数组。 '''Q: 如何获取二维数组的行数和列数?''' A: 对于静态数组: <syntaxhighlight lang="cpp"> int rows = sizeof(matrix) / sizeof(matrix[0]); // 行数 int cols = sizeof(matrix[0]) / sizeof(matrix[0][0]); // 列数 </syntaxhighlight> == 性能考虑 == 1. '''局部性原理''':按行顺序访问数组可以利用缓存局部性,提高性能。 2. 对于大型数组,考虑使用一维数组模拟二维数组(<code>array[row*cols + col]</code>),有时性能更好。 3. 动态分配的二维数组可能不如连续存储的一维数组高效。 == 总结 == 二维数组是C++中表示表格数据的强大工具。掌握它的声明、初始化和访问方法对处理矩阵、图像、游戏地图等应用至关重要。对于高级应用,可以考虑使用标准库中的<code>vector</code>或专门的矩阵库来提高开发效率和性能。 [[Category:编程语言]] [[Category:C++]] [[Category:C++ 数组]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)