С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
zek921
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
#1

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

05.11.2011, 22:24. Просмотров 2627. Ответов 8
Метки нет (Все метки)

Как правильно прописать в параметры функции двумерный массив типа Т ?(шаблонная функция)
Видел формулу преобразования двумерного в одномерный ,но так не хочу .Хочу научиться и разобраться как оно всё в памяти лежит и как к нему обращаться .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2011, 22:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция - шаблон ,параметр - двумерный массив типа Т . (C++):

Двумерный массив как параметр функции - C++
Есть такая функция, загружающая элементы из бинарного файла в массив bool m1: void loadfromfile(char *filename, int col, int row) {...

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

Двумерный массив типа: - C++
Помогите пожалуйста решить задачу на Си: Сформировать и распечатать квадратную матрицу размерности (10,10) следующего вида: 0 0 … 0 0 1...

двумерный динамический массив типа char - C++
#include <iostream> #include <iomanip> #include <windows.h> using namespace std; void RussianMessage(const char *str) { ...

Функция и двумерный массив - C++
Я не знаю в чём проблема заключается на этом этапе, но гуглил я много. Если не сложно, просто исправьте код под нужный или объясните, как...

Функция и двумерный массив - C++
Как использовать в качестве аргумента функции двумерный массив? Все не могу понять, пожалуйста напишите с маленьким примером, чтобы...

8
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
05.11.2011, 22:26 #2
C++
1
void func(T** arr, const size_t rows, const size_t cols);
1
zek921
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
05.11.2011, 22:28  [ТС] #3
так не работает.
** массив как статический ,так и динамический .
0
I2um1
Злой няш
1404 / 1102 / 142
Регистрация: 05.04.2010
Сообщений: 1,949
05.11.2011, 22:38 #4
Цитата Сообщение от zek921 Посмотреть сообщение
** массив как статический ,так и динамический .
C++
1
#define func(arr, rows, cols) /*Пишем здесь то, что надо делать*/
Где arr может быть что угодно.
И никакой головной боли.
1
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
06.11.2011, 00:58 #5
Blood-Angel, так писать не надо.

zek921, чем вас не устроила функция ForEveR?
1
zek921
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
06.11.2011, 01:11  [ТС] #6
У функции на статические массивы аллергия .Для динамических - без проблем,под них в итоге и сделал ,но осадок остался .
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 07:25 #7
Цитата Сообщение от zek921 Посмотреть сообщение
У функции на статические массивы аллергия
По сути, многомерные статические массивы являются одномерными, поэтому общую функцию для статических и динамических использовать не получится. Но перегрузка тебе поможет.
void func(T arr[5][10] );
1
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
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;
}
2
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 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 );
}
1
06.11.2011, 09:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 09:27
Привет! Вот еще темы с ответами:

Функция и двумерный массив. - C++
День добрый. У меня такое задание: нужно создать функцию которая будет находить сумму элементов в тех строках, которые содержат хотя бы...

Двумерный массив и функция - C++
Нууууу плиззз подскажите как сделать в виде отдельной функции????? Borland C++ #include&lt;iostream.h&gt; #include&lt;math.h&gt; ...

двумерный массив и функция! - C++
Парни помогите, чего-то я не догоняю! у меня есть функция kol она считает сколько столбцов с нулевым элементом встречается и плюсует в...

Функция (параметр - одномерный массив). Вычислить разность между количеством отрицательных и положительных элементов - C++
Помогите, пожалуйста, с задачей. Сложность - работа с указателями.. Задача: Вычислить разность между количеством отрицательных и...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.