我们平常定义二维数组的时候,常用方法就类似于这样:
int a[10][10];
但是,我们可以采用array来实现二维数组。这个在定义的时候就看上去没那么直观了。
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<array>
using namespace std;
const size_t rows = 2;
const size_t columns = 3;
void printArray(const array<array<int, columns>, rows>&);
int main()
{
array<array<int, columns>, rows> array1 = { 1,2,3,4,5,6 };
array<array<int, columns>, rows> array2 = { 1,2,3,4,5 };
cout << "Values in array1 by row are:\n";
printArray(array1);
cout << "\nValues in array2 by row are:\n";
printArray(array2);
}
void printArray(const array<array<int, columns>, rows>& a)
{
for (auto const& row : a)
{
for (auto const& element : row)
printf_s("%d ", element);
cout << endl;
}
}
定义的方法就是在一个array里面,把它的类型设置为另一个array
然后在迭代的时候就先迭代每一个行,再迭代每一个列。就其实就是一个通过嵌套一维数组的方式实现多维数组。
三维的定义就看起来就也是类似的,在二维数组的前提下,再往里面嵌套一层一维数组就可以了。
比如,把上面的代码改一改,就得到了下面的三维数组的代码
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<array>
using namespace std;
const size_t rows = 2;
const size_t columns = 3;
const size_t heights = 4;
void printArray(const array<array<int, columns>, rows>&);
void print_threeDimensionArray(const array<array<array<int, columns>,rows>, heights>&);
int main()
{
array<array<int, columns>, rows> array1 = { 1,2,3,4,5,6 };
array<array<int, columns>, rows> array2 = { 1,2,3,4,5 };
array<array<array<int, columns>, rows>, heights> array3 = { 1,2,3,4,5,6,7,8,9,10,11,12 };
cout << "Values in array1 by row are:\n";
printArray(array1);
cout << "\nValues in array2 by row are:\n";
printArray(array2);
cout << "\nValues in array3 are:\n";
print_threeDimensionArray(array3);
}
void printArray(const array<array<int, columns>, rows>& a)
{
for (auto const& row : a)
{
for (auto const& element : row)
printf_s("%d ", element);
cout << endl;
}
}
void print_threeDimensionArray(const array<array<array<int, columns>, rows>, heights>& a)
{
int js=0;
for (auto const& height : a)
{
js++;
printf_s("\n正在输出第%d层:\n", js);
for (auto const& row : height)
{
for (auto const& element : row)
printf_s("%d ",element);
cout << endl;
}
}
}
执行结果:
Values in array1 by row are:
1 2 3
4 5 6
Values in array2 by row are:
1 2 3
4 5 0
Values in array3 are:
正在输出第1层:
1 2 3
4 5 6
正在输出第2层:
7 8 9
10 11 12
正在输出第3层:
0 0 0
0 0 0
正在输出第4层:
0 0 0
0 0 0
对比分析可以发现,数组的第一个维度要写在最外面,第二个维度写在中间,最高维度的元素尺寸写在最里面。这个有点难理解,但是它确实是这样的[doge]