Форум программистов, компьютерный форум CyberForum.ru

Функция - шаблон ,параметр - двумерный массив типа Т . - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
zek921
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
05.11.2011, 22:24     Функция - шаблон ,параметр - двумерный массив типа Т . #1
Как правильно прописать в параметры функции двумерный массив типа Т ?(шаблонная функция)
Видел формулу преобразования двумерного в одномерный ,но так не хочу .Хочу научиться и разобраться как оно всё в памяти лежит и как к нему обращаться .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.11.2011, 22:26     Функция - шаблон ,параметр - двумерный массив типа Т . #2
C++
1
void func(T** arr, const size_t rows, const size_t cols);
zek921
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
05.11.2011, 22:28  [ТС]     Функция - шаблон ,параметр - двумерный массив типа Т . #3
так не работает.
** массив как статический ,так и динамический .
I2um1
Злой няш
 Аватар для I2um1
1333 / 1031 / 114
Регистрация: 05.04.2010
Сообщений: 1,808
05.11.2011, 22:38     Функция - шаблон ,параметр - двумерный массив типа Т . #4
Цитата Сообщение от zek921 Посмотреть сообщение
** массив как статический ,так и динамический .
C++
1
#define func(arr, rows, cols) /*Пишем здесь то, что надо делать*/
Где arr может быть что угодно.
И никакой головной боли.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
06.11.2011, 00:58     Функция - шаблон ,параметр - двумерный массив типа Т . #5
Blood-Angel, так писать не надо.

zek921, чем вас не устроила функция ForEveR?
zek921
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
06.11.2011, 01:11  [ТС]     Функция - шаблон ,параметр - двумерный массив типа Т . #6
У функции на статические массивы аллергия .Для динамических - без проблем,под них в итоге и сделал ,но осадок остался .
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 07:25     Функция - шаблон ,параметр - двумерный массив типа Т . #7
Цитата Сообщение от zek921 Посмотреть сообщение
У функции на статические массивы аллергия
По сути, многомерные статические массивы являются одномерными, поэтому общую функцию для статических и динамических использовать не получится. Но перегрузка тебе поможет.
void func(T arr[5][10] );
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
06.11.2011, 09:20     Функция - шаблон ,параметр - двумерный массив типа Т . #8
Вот с перегрузочкой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <cstdlib>
 
template <class T>
void func(T** arr, const size_t rows, const size_t cols)
{
    std::cout << "Overloaded func for dynamic two-dimensional arrays" << std::endl;
 
    for(size_t i = 0; i < rows; ++i, std::cout << std::endl)
    for(size_t j = 0; j < cols; ++j)
        std::cout << arr[i][j] << " ";
}
 
template <class T, size_t rows, size_t cols>
void func(T (&arr)[rows][cols])
{
    std::cout << "Overloaded func for static two-dimensional arrays" << std::endl;
 
    for(size_t i = 0; i < rows; ++i, std::cout << std::endl)
    for(size_t j = 0; j < cols; ++j)
        std::cout << arr[i][j] << " ";
}
 
int main()
{
    const size_t rows = 2, cols = 3;
    
    int stat[rows][cols];
    int** dyn = new int* [rows];
 
    for(size_t i = 0; i < rows; ++i)
    dyn[i] = new int [cols];
 
    for(size_t i = 0; i < rows; ++i)
    for(size_t j = 0; j < cols; ++j)
        stat[i][j] = dyn[i][j] = i * j + i + j + 1;
 
    func(dyn, rows, cols);
    func(stat);
    
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 09:27     Функция - шаблон ,параметр - двумерный массив типа Т .
Еще ссылки по теме:

Функция и двумерный массив C++
Функция и двумерный массив C++
C++ Есть функция которая добавляет элемент типа int в конец массива. Как ее переделать через шаблон

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 09:27     Функция - шаблон ,параметр - двумерный массив типа Т . #9
Или вот так, на случай, если работа более сложная, чем вывод в консоль, и копипастить код не хочется.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
template< class T >
void PrintLine( T * line, size_t cols )
{
    for( size_t i = 0; i < cols; ++i )
        std::cout << line[i] << " ";
}
 
template <class T>
void func(T** arr, const size_t rows, const size_t cols)
{
    std::cout << "Overloaded func for dynamic two-dimensional arrays" << std::endl;
 
    for(size_t i = 0; i < rows; ++i, std::cout << std::endl)
        PrintLine( arr[i], cols );
}
 
template <class T, size_t rows, size_t cols>
void func(T (&arr)[rows][cols])
{
    std::cout << "Overloaded func for static two-dimensional arrays" << std::endl;
 
    for(size_t i = 0; i < rows; ++i, std::cout << std::endl)
        PrintLine( &arr[i][0], cols );
}
Yandex
Объявления
06.11.2011, 09:27     Функция - шаблон ,параметр - двумерный массив типа Т .
Ответ Создать тему
Опции темы

Текущее время: 21:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru