▼Прихований текст
grecigor11 написав:
У мене є шаблон, який приймає тривимірний масив для знаходження максимуму. Суть завдання полягає в тому, що цей шаблон повинен знаходити максимум і в одновимірному масиві. У нас додається змінна char question if question = '1' = тривимірний, якщо 2, то одновимірний.
Ось мій шаблон -
▼Прихований текстtemplate<typename T2> T2 maxShablon2(T2 ***arr, const int n) { int max = arr[0][0][0]; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { for (int k = 0; k < n; ++k) { if (arr[i][j][k] > max) { max = arr[i][j][k]; } } } } cout << " Our max: " << max; }
У чому власне проблема? Крім того Ваш шаблон, для 3-вимірного масиву, працює не правильно.
▼Прихований текст
#include <iostream>
using namespace std;
template<typename T> T max_a3d_t(T arr[][3][3], const size_t TABS)
{
T max = arr[0][0][0];
for (size_t t = 0; t < TABS; ++t)
for (size_t r = 0; r < 3; ++r)
for (size_t c = 0; c < 3; ++c)
if (arr[t][r][c] > max)
max = arr[t][r][c];
return max;
}
int main() {
int a3d[3][3][3] = {
// Таблиця # 0
{{11, 12, 13},
{14, 15, 16},
{17, 18, 19}},
// Таблиця # 1
{{21, 22, 23},
{24, 25, 26},
{27, 28, 29}},
// Таблиця # 2
{{31, 32, 33},
{34, 35, 36},
{37, 38, 39}}
};
int m = max_a3d_t(a3d, 3);
cout << "Our max: " << m << endl;
return 0;
}
А для того, щоб шукало максимуми в одновимірних та багатовимірних масивах, потрібно або перезавантаження шаблону, або представляти багатовимірний масиви, як одновимірний
▼Прихований текст
#include <iostream>
using namespace std;
template<typename T> T max_aNd_t(T* p, const size_t SIZE)
{
T max = *p;
for (size_t id = 0; id < SIZE; ++id)
if (*(p + id) > max)
max = *(p + id);
return max;
}
int main() {
int* parr;
int a1d[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int a2d[2][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8}
};
int a3d[3][3][3] = {
{ {11, 12, 13}, {14, 15, 16}, {17, 18, 19} },
{ {21, 22, 23}, {24, 25, 26}, {27, 28, 29} },
{ {31, 32, 33}, {34, 35, 36}, {37, 38, 39} }
};
parr = &a1d[0];
cout << "Our max: " << max_aNd_t(parr, 9) << endl;
parr = &a2d[0][0];
cout << "Our max: " << max_aNd_t(parr, (2 * 4)) << endl;
parr = &a3d[0][0][0];
cout << "Our max: " << max_aNd_t(parr, (3 * 3 * 3)) << endl;
return 0;
}