1

Тема: Використовувати один і той-же шаблон для тривимірного і одновимірного

У мене є шаблон, який приймає тривимірний масив для знаходження максимуму. Суть завдання полягає в тому, що цей шаблон повинен знаходити максимум і в одновимірному масиві. У нас додається змінна 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;
}

2

Re: Використовувати один і той-же шаблон для тривимірного і одновимірного

Прихований текст
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;
}

3

Re: Використовувати один і той-же шаблон для тривимірного і одновимірного

Відповісти на непоставлене питання - це як почути плескіт однієї долоні.