В C++ трехмерный массив можно реализовать двумя способами:
- Использование массива (статическое)
- Используя вектор (динамический)
Передача статического 3D-массива в функцию: использование указателей при передаче массива. Преобразование его в эквивалентный тип указателя.
char ch[2][2][2];
void display(char (*ch)[2][2]) {
. . .
}
Программа для передачи статического 3D-массива в качестве параметра:
С++
// C++ code to demonstrate the above method
#include <bits/stdc++.h>
using
namespace
std;
// Function to show how to pass
// a 3D character array to a function
void
display(
char
(*ch)[2][2])
{
for
(
int
i = 0; i < 2; i++) {
for
(
int
j = 0; j < 2; j++) {
for
(
int
k = 0; k < 2; k++) {
cout <<
"ch["
<< i <<
"]["
<< j <<
"]["
<< k <<
"] = "
<< ch[i][j][k] << endl;
}
}
}
}
// Driver code
int
main()
{
char
ch[2][2][2] = { { {
'a'
,
'b'
}, {
'c'
,
'd'
} },
{ {
'e'
,
'f'
}, {
'g'
,
'h'
} } };
// Function call with 3D array as parameter
display(ch);
return
0;
}
Выход
ch[0][0][0] = a ch[0][0][1] = b ch[0][1][0] = c ch[0][1][1] = d ch[1][0][0] = e ch[1][0][1] = f ch[1][1][0] = g ch[1][1][1] = h
Передача трехмерного вектора (динамический массив): когда вектор передается в функцию, он может быть передан либо по значению, где хранится копия вектора, либо по ссылке, где передается адрес вектора.
Передать по значению:
void function(vector <vector <vector < char >>> ch) {
. . .
}
Пройти по ссылке (лучше):
void function(vector< vector < vector < char>>> &ch) {
. . .
}
Программа для передачи динамического 3D-массива в качестве параметра:
С++
// C++ code to demonstrate the initialization
// and passing as a parameter (passed as reference)
#include <bits/stdc++.h>
using
namespace
std;
// Parameter passed as reference
void
display(vector<vector<vector<
char
> > >& ch)
{
for
(
int
i = 0; i < 2; i++) {
for
(
int
j = 0; j < 2; j++) {
for
(
int
k = 0; k < 2; k++) {
cout <<
"ch["
<< i <<
"]["
<< j <<
"]["
<< k <<
"] = "
<< ch[i][j][k] << endl;
}
}
}
}
int
main()
{
vector<vector<vector<
char
> > > ch
= { { {
'a'
,
'b'
}, {
'c'
,
'd'
} },
{ {
'e'
,
'f'
}, {
'g'
,
'h'
} } };
// Function to call function by passing as parameter
display(ch);
return
0;
}
Выход
ch[0][0][0] = a ch[0][0][1] = b ch[0][1][0] = c ch[0][1][1] = d ch[1][0][0] = e ch[1][0][1] = f ch[1][1][0] = g ch[1][1][1] = h
Возврат трехмерного массива: статический массив не может быть возвращен из функции в C++. Таким образом, мы должны передать 3D-вектор из функции, чтобы получить возможность возвращать 3D-массив.
vector <vector< vector <char>>> fun() {
vector <vector< vector <char>>> ch;
. . .
return ch;
}