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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.90
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
#1

Шаблоны функций - C++

02.04.2011, 01:39. Просмотров 3791. Ответов 37
Метки нет (Все метки)

не совсем понимаю, как работают шаблоны функций , в учебнике только дан пример и не объяснено ниче(
САма программа готовая есть, надо переделать с шаблонами но не знаю как
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include<iostream.h>
 
template<class T> T max(T *a, int m, int n);
int nuts(int **a, int m, int n);
int nuts1(int **a, int m, int n);
 
int main()
{
    int **a=NULL;
    int m, n;
    int i, h =0;
    cout<<"Vvod razmernosti"<<endl;
    cout<<"m: ";
    cin>>m;
    cout<<"n: ";
    cin>>n;
    a= new int *[m];
 
    cout<<"Vvod matricy iz "<<m;
    cout<<" strok i "<<n<<" stolbov: ";
    cout<<endl;
    for(i=0;i<m;i++)
    {
        a[i]=new int [n];
        for (int j=0; j<n; j++)
            cin>>a[i][j];
    }
    for (i=0;i<m;i++)
    {
        cout<<endl;
        for (int j=0; j<n;j++)
            cout<<a[i][j]<<"  ";
    }
    cout<<"Chislo strok bez '0' : "<<nuts(a,m,n)<<'\n';
    cout<<endl;
    cout<<"Naib. chislo: "<<nuts1(a,m,n)<<'\n';// else cout<<"Net povtorov"<<'\n';
    cout<<endl;
    delete[] a;
    return 0;
}
int nuts(int **a, int m, int n)
{
    int h;
    h=0;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            if(a[i][j]==0) break;
            if(j==n) h++;
    }
    return h;
}
int nuts1(int **a, int m, int n)
{
    int max=0; //bool fl=false;
    for (int i=0; i<m;i++)
        for (int j=0; j<n;j++)
            if ((/*fl && */a[i][j]>max)/* || (!fl)*/)
            {
                for (int l=0; l<m; l++)
                    for (int p=0;p<n;p++)
                        if (a[l][p]==a[i][j] && (l!=i ||p!=j))
                        {
                    //      if(!fl) fl=true;
                            max=a[i][j];
                            l=m;
                            break;
                        }
                    //  cout<<"\n";
                    //  if (fl===true) cout <<"Naib. chislo:  "<<
            }
                        return max;
            }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2011, 01:39     Шаблоны функций
Посмотрите здесь:

Шаблоны функций. - C++
Написать шаблон функции, осуществляющей обработку линейного массива. Тип и размер массива передаются как параметры шаблона ( &lt;class T, int...

Шаблоны функций c++ - C++
Хэллоу фрэндс! Столкнулся с проблеммой в решении упражнения. Вот условие: Создайте шаблонную функцию maxn(), которая принимает в...

Шаблоны функций - C++
Всех приветствую! народ помогите задали лабораторку, а в с++ я только новичок подскажите как сделать следующее:

Шаблоны функций в с++ - C++
Подскажите, почему появляется сообщение об ошибке? как исправить? #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; //#include &lt;ctime&gt; ...

Шаблоны функций - C++
Привет всем, я новичок в С++, хо4у изучать этот язык, буду делать через VS 2008 прошу вас придумать какие нибудь не сильно сложные задачки...

шаблоны функций - C++
Помогите пожалуйста с задачей: Разработайте программу, в которой реализовано нахождение количества пар одинаковых по значению соседних...

шаблоны функций на С++ - C++
помогите с задачей условие таково. Дан одна мерный массив состоящий из целых чисел нужно найти произвидение всех отрицательных элементов и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
07.04.2011, 08:54     Шаблоны функций #21
Вынос реализации функций в отдельный файл позволяет окончательно детали этой реализации скрыть путём компиляции его отдельного от остального проекта, но заголовки функций всё равно включать во все файлы, где есть вызов этих функций, что необходимо для их использования, так как иначе вызов просто не возможен. Библиотеки функций и отдельные модули с функциями - три различные реализации такого подхода. Библиотеки считаются за две реализации, так как они бывают со статическим и динамическим связыванием. Только я не понял, при чём здесь класс.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 09:00     Шаблоны функций #22
Цитата Сообщение от taras atavin Посмотреть сообщение
но заголовки функций всё равно включать во все файлы, где есть вызов этих функций
Это требование распространяется и на не шаблонные функции.)
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
15.04.2011, 03:07  [ТС]     Шаблоны функций #23
а ккак с вызово шаблонов, или там просто от функции так и оставить?...
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.04.2011, 06:36     Шаблоны функций #24
Шаблоны вызывать нельзя. Шаблон пишется для того, чтоб по нему сгенерить несколько версий функции, а вызываюстя уже эти версии так, как если бы функция была перегружена обычным способом.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
24.04.2011, 17:38  [ТС]     Шаблоны функций #25
Первый пункт , прога тока целые элементы массива принимает

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
43
44
45
46
47
48
#include<iostream.h>
 
template <typename T1> 
T1 nuts(T1 **a, int m, int n){
 
        int h;
        h=0;
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                        if(a[i][j]==0) break;
                        if(j==n) h++;
        }
        return h;
}
int main()
{
        int **a=NULL;
        int m, n;
        int i, h =0;
        cout<<"Vvod razmernosti"<<endl;
        cout<<"m: ";
        cin>>m;
        cout<<"n: ";
        cin>>n;
        a= new int *[m];
 
        cout<<"Vvod matricy iz "<<m;
        cout<<" strok i "<<n<<" stolbov: ";
        cout<<endl;
        for(i=0;i<m;i++)
        {
                a[i]=new int [n];
                for (int j=0; j<n; j++)
                        cin>>a[i][j];
        }
        for (i=0;i<m;i++)
        {
                cout<<endl;
                for (int j=0; j<n;j++)
                        cout<<a[i][j]<<"  ";
        }
        cout<<"Chislo strok bez '0' : "<<nuts(a,m,n)<<'\n';
        cout<<endl;
 
        delete[] a;
 
}
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 16:55  [ТС]     Шаблоны функций #26
ругается что тип а неизвестен

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
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream.h>
 
template <typename T> 
T nuts(T **a)
{
 
    T **a=NULL;
    int m, int n;
    int h;
    h=0;
    int m, n;
    int i, h =0;
    cout<<"Vvod razmernosti"<<endl;
    cout<<"m: ";
    cin>>m;
    cout<<"n: ";
    cin>>n;
    a= new T *[m];
 
    cout<<"Vvod matricy iz "<<m;
    cout<<" strok i "<<n<<" stolbov: ";
    cout<<endl;
    for(i=0;i<m;i++)
    {
        a[i]=new T [n];
        for (int j=0; j<n; j++)
            cin>>a[i][j];
    }
    for (i=0;i<m;i++)
    {
        cout<<endl;
        for (int j=0; j<n;j++)
            cout<<a[i][j]<<"  ";
    }
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            if(a[i][j]==0) break;
            if(j==n) h++;
    }
    return h;
 
//int nuts(int);
}
 
 
//int nuts(int **a, int m, int n);
//int nuts1(int **a, int m, int n);
 
int main()
{
    //float **a=NULL;
 
    cout<<"strok s '0' : "<<nuts(a)<<'\n';
    cout<<endl;
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 16:58     Шаблоны функций #27
И я бы ругался. Ты а не объявил, а использовать пытаешься.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:17  [ТС]     Шаблоны функций #28
дак а толку... я тупой наверно)
а я вроде тоже обьявлял и ниче не происходит
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 18:24     Шаблоны функций #29
Строка 54. Ты передаёшь в функцию несуществующую переменную. У неё нет типа. Компилятор не может инстанцировать функцию. И обижается на тебя. Не обижай компилятор, объяви переменную.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:29  [ТС]     Шаблоны функций #30
а под каким типом тогда ее обьявить и в каком месте??
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 18:41     Шаблоны функций #31
Под тем типом, который тебе нужен. Объявить ДО использования.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:47  [ТС]     Шаблоны функций #32
дык я не знаю какоготипа, если по идее он в шабоне задается.....
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 18:53     Шаблоны функций #33
Нет. В шаблоне тип не задаётся.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:59  [ТС]     Шаблоны функций #34
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include<iostream.h>
 
template <typename T> 
T nuts(T **a)
{
 
//        T **a=NULL;
   // int m, int n;
        int h;
        h=0;
        int m, n;
        int i =0;
        cout<<"Vvod razmernosti"<<endl;
        cout<<"m: ";
        cin>>m;
        cout<<"n: ";
        cin>>n;
        a= new T *[m];
 
        cout<<"Vvod matricy iz "<<m;
        cout<<" strok i "<<n<<" stolbov: ";
        cout<<endl;
        for(i=0;i<m;i++)
        {
                a[i]=new T [n];
                for (int j=0; j<n; j++)
                        cin>>a[i][j];
        }
        for (i=0;i<m;i++)
        {
                cout<<endl;
                for (int j=0; j<n;j++)
                        cout<<a[i][j]<<"  ";
        }
        for(i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                        if(a[i][j]==0) break;
                        if(j==n) h++;
        }
        return h;
 
//int nuts(int);
}
 
 
//int nuts(int **a, int m, int n);
//int nuts1(int **a, int m, int n);
 
int main()
{ 
    
float **a=NULL;
a= new float *[];
int n,m; 
for(int i=0;i<m;i++)
        {
                a[i]=new float [n];
        //        for (int j=0; j<n; j++)
          //              cin>>a[i][j];
        }
         
        cout<<"strok s '0' : "<<nuts(a)<<'\n';
         cout<<endl;
}

вот так правильно?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 19:04     Шаблоны функций #35
Нет. После инстанцирования будет float** nuts(float** **a)
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 19:44  [ТС]     Шаблоны функций #36
ААААААААА, вс1е, мой мозг кипит)))

Добавлено через 17 минут
напиши как , буду признателен=))
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 19:54     Шаблоны функций #37
Вероятно я наврал и инстанцирование пройдет так: float nuts(float **a)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2011, 15:34     Шаблоны функций
Еще ссылки по теме:

Шаблоны функций - C++
Добрый вечер! less.h #pragma once #include &quot;StdAfx.h&quot; //preconditions: //defined operator&lt; template &lt;typename elemType&gt; ...

Шаблоны функций - C++
Rififi, привет какой у тебя емеил Добавлено через 58 минут 9 секунд тема: Шаблони функції Помогите написпть код програми на...

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

Шаблоны функций - C++
Пытаюсь разобраться в шаблонах функций. Написал такой код, не работает: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace...

Шаблоны функций - C++
Добрый вечер! У меня возникли трудности с шаблонами функций. Вот код с шаблоном template &lt;class type,class ttype&gt; ttype...


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

Или воспользуйтесь поиском по форуму:
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
07.05.2011, 15:34  [ТС]     Шаблоны функций #38
все равно мне ето ниче не дает.....)))

Добавлено через 21 минуту
дык куды мне еето дело написать??

Добавлено через 1 минуту
вот я сделал все задания в проге, а вот с шаблоно все равно не прет..

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include<iostream.h>
 
template <typename T> 
T nuts(T **a)
{
 
        int h;
        h=0;
        int m, n;
        int i =0;
        cout<<"Vvod razmernosti"<<endl;
        cout<<"m: ";
        cin>>m;
        cout<<"n: ";
        cin>>n;
        a= new T *[m];
 
        cout<<"Vvod matricy iz "<<m;
        cout<<" strok i "<<n<<" stolbov: ";
        cout<<endl;
        for(i=0;i<m;i++)
        {
                a[i]=new T [n];
                for (int j=0; j<n; j++)
                        cin>>a[i][j];
        }
        for (i=0;i<m;i++)
        {
                cout<<endl;
                for (int j=0; j<n;j++)
                        cout<<a[i][j]<<"  ";
        }
        for(i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                        if(a[i][j]==0) break;
                        if(j==n) h++;
        }
cout<<"Strok bez '0'"<<h;
    cout<<endl;
    //  
 
float   max=0;
    //int m,n;
    for(i=0; i<m; i++)
        for(int j=0; j<n; j++)
        {
            if(a[i][j]>max) 
                for(int l=0; l<m;l++)
                    for(int p=0; p<n; p++)
                    {
                        if((a[i][j]==a[l][p]) && (p!=i || l!=j))
                            max=a[i][j];
                    }
        }
        cout<<"max: "<<max;
        cout<<endl;
    //  cout<<"Strok bez '0'"<<h;
    //  cout<<endl;
    //  cout<<"max: "<<max;
    //  cout<<endl;
return 0;
 
 
       // return h;
 
}
//template<class T1>
//T1 nuts1(T1 **a)
//{
//  float max;
/*  max=0;
    int m,n;
    for(int i=0; i<m; i++)
        for(int j=0; j<n; j++)
        {
            if(a[i][j]>max) 
                for(int l=0; l<m;l++)
                    for(int p=0; p<n; p++)
                    {
                        if((a[i][j]==a[l][p]) && (p!=i || l!=j))
                            max=a[i][j];
                    }
        }
    //  cout<<"max: "<<max;
    //  cout<<endl;
return max;*/
//}
 
 
int main()
{ 
    
float **a=NULL;
a= new float *[];
int n,m; 
for(int i=0;i<m;i++)
        {
                a[i]=new float [n];
        }
         
        /*cout<<"strok bez '0' : "<<*/nuts(a);//<<'\n';
         cout<<endl;
 
//        cout<<"max : "<<max<<'\n';
  //       cout<<endl;
 
}
Добавлено через 32 секунды
много закоментил тока))

Добавлено через 19 часов 6 минут
добрые люди сказали что так сделано правильно)
Yandex
Объявления
07.05.2011, 15:34     Шаблоны функций
Ответ Создать тему
Опции темы

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