dmndxld

码不停题

二维数组

类似于一维数组,二维数组也是由元素的序列组成。但是这些元素可以排列在矩形网格中而不是直线上。

原理

在一些语言中,多维数组实际上是在内部作为一维数组实现的,而在其他一些语言中,实际上根本没有多维数组

 

1. C++ 将二维数组存储为一维数组。

下图显示了大小为 M * N 的数组 A 的实际结构:

因此,如果我们将 A 定义为也包含 M * N 个元素的一维数组,那么实际上 A[i][j] 就等于 A[i * N + j]

 

2. 在Java中,二维数组实际上是包含着 M 个元素的一维数组,每个元素都是包含有 N 个整数的数组。

下图显示了 Java 中二维数组 A 的实际结构:

 

动态二维数组

与一维动态数组类似,我们也可以定义动态二维数组。 实际上,它可以只是一个嵌套的动态数组。 你可以自己尝试一下。

 

c++代码实现:

 1 #include <iostream>
 2 
 3 template <size_t n, size_t m>
 4 void printArray(int (&a)[n][m]) {
 5     for (int i = 0; i < n; ++i) {
 6         for (int j = 0; j < m; ++j) {
 7             cout << a[i][j] << " ";
 8         }
 9         cout << endl;
10     }
11 }
12 
13 int main() {
14     cout << "Example I:" << endl;
15     int a[2][5];
16     printArray(a);
17     cout << "Example II:" << endl;
18     int b[2][5] = {{1, 2, 3}};
19     printArray(b);
20     cout << "Example III:"<< endl;
21     int c[][5] = {1, 2, 3, 4, 5, 6, 7};
22     printArray(c);
23     cout << "Example IV:" << endl;
24     int d[][5] = {{1, 2, 3, 4}, {5, 6}, {7}};
25     printArray(d);
26 }

 

这里简单认识了解一下template:

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。

每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector <int> 或 vector <string>

 详细参考:https://www.runoob.com/cplusplus/cpp-templates.html 

虽然我也不太懂。。。

posted on 2019-04-29 21:07  imyourterminal  阅读(454)  评论(0编辑  收藏  举报

导航