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

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

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

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

02.04.2011, 01:39. Просмотров 4001. Ответов 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;
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2011, 01:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Шаблоны функций (C++):

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

Шаблоны функций - C++
Написала прогу на шаблоны функций. не могу понять где ошибка // функции.cpp: определяет точку входа для консольного приложения. // ...

Шаблоны функций C++ - C++
Привет ребят. Мб кто подскажет, у меня последняя часть кода &quot;максимальное из чисел, встречающихся в заданной матрице более одного раза&quot;...

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

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

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

37
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
07.04.2011, 07:41 #16
Кстати, есть шаблоны функций и шаблоны классов, это не одно и тоже. Шаблон класса - это уже класс, разрешающий менять действительный тип своих членов. Применяется, например, для создания нескольких одинаковых контейнеров для разных базовых типов.
0
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
07.04.2011, 07:42 #17
taras atavin, Ну да, а еще есть специализации, позволяющие задвигать такооооое, что без их использования и не снилось.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 08:15 #18
А при помощи явного инстанцирования можно задвинуть ещё дальше.)
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
07.04.2011, 08:18 #19
Цитата Сообщение от ForEveR Посмотреть сообщение
Ну да, а еще есть специализации, позволяющие задвигать такооооое, что без их использования и не снилось.
. Щас бы я как раз и начал про них здесь объяснять и окончательно затролил бы тему, если бы знал, что такое специализации в данном контексте.

Добавлено через 55 секунд
Цитата Сообщение от Deviaphan Посмотреть сообщение
А при помощи явного инстанцирования можно задвинуть ещё дальше.)
Ну и про это тоже, если бы сам знал.
0
Deviaphan
07.04.2011, 08:45
  #20

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
Ну и про это тоже, если бы сам знал.
Если очень вкратце, то это позволяет вынести реализацию шаблонной функции в файл реализации. Но с потерей гибкости.

0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
07.04.2011, 08:54 #21
Вынос реализации функций в отдельный файл позволяет окончательно детали этой реализации скрыть путём компиляции его отдельного от остального проекта, но заголовки функций всё равно включать во все файлы, где есть вызов этих функций, что необходимо для их использования, так как иначе вызов просто не возможен. Библиотеки функций и отдельные модули с функциями - три различные реализации такого подхода. Библиотеки считаются за две реализации, так как они бывают со статическим и динамическим связыванием. Только я не понял, при чём здесь класс.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 09:00 #22
Цитата Сообщение от taras atavin Посмотреть сообщение
но заголовки функций всё равно включать во все файлы, где есть вызов этих функций
Это требование распространяется и на не шаблонные функции.)
0
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
15.04.2011, 03:07  [ТС] #23
а ккак с вызово шаблонов, или там просто от функции так и оставить?...
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
15.04.2011, 06:36 #24
Шаблоны вызывать нельзя. Шаблон пишется для того, чтоб по нему сгенерить несколько версий функции, а вызываюстя уже эти версии так, как если бы функция была перегружена обычным способом.
0
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;
 
}
0
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;
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 16:58 #27
И я бы ругался. Ты а не объявил, а использовать пытаешься.
0
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:17  [ТС] #28
дак а толку... я тупой наверно)
а я вроде тоже обьявлял и ниче не происходит
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 18:24 #29
Строка 54. Ты передаёшь в функцию несуществующую переменную. У неё нет типа. Компилятор не может инстанцировать функцию. И обижается на тебя. Не обижай компилятор, объяви переменную.
0
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:29  [ТС] #30
а под каким типом тогда ее обьявить и в каком месте??
0
06.05.2011, 18:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2011, 18:29
Привет! Вот еще темы с ответами:

Шаблоны функций - C++
Надо в этом задании добавить &quot;шаблоны ф-ций&quot;, помогите пжл Задачи надо переписывать в текст сообщения!!! Одно сообщение - одна...

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

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

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


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

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

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