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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
#1

шаблоны в си++ - C++

13.12.2009, 16:50. Просмотров 2811. Ответов 22
Метки нет (Все метки)

Здравствуйте, я уже сутки пытаюсь переписать стек так, что-бы можно было испольовать все возможные типы данных для элементов стека. Если я верно понял нужно использовать шаблоы, пытался но ничего не вышло.. Если кто знает как ето реализировать буду очень признателен.. Вот
код
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
#include <iostream>
 
using namespace std;
 
struct node
{
    int inf;
    node* next;
};
 
class stack
{
public:
    stack(){head = NULL;}
    ~stack(){}
    void push(int &val)
    {
        node* tmp = new node;
        tmp->inf = val;
        tmp->next = head;
        head = tmp;
    }
    int pop()
    {
        int val = head->inf;
        node* tmp = head;
        head = head->next;
        delete head; 
        return val;
    }
    void clear()
    {
        while (head->next != NULL)    
        {
            node* tmp = head;
            head = head->next;
            delete tmp;
        }
        head = NULL;
    }
    bool empty() {return (head == NULL);}
private:
    node* head;    
};
 
int main()
{
    int val, key;
    stack top;
    
    do
    {
        system("cls");
        cout << "\tStack\t\t\t\tmade by TFTM\n\n";
        cout << "1 - push\n";
        cout << "2 - pop & write\n";
        cout << "3 - exit\n\n";
        cout << "press key: ";
        cin >> key;
        switch (key)
        {
            case 1:
                {
                    cout << "\nenter element: ";
                    cin >> val;
                    top.push(val);
                    break;    
                }
            case 2:
                {
                    if (top.empty()) cout << "stack is empty..";
                    else
                    {
                        cout << "poping:\n";
                        while (!top.empty())
                            cout << top.pop() << endl;
                    }
                    system("pause");
                    break;    
                }
            default:
                {
                    if (key == 3) cout << "exiting succesfully..\n";
                    else cout << "press only 1, 2 or 3\n";
                    system("pause");
            }                
        }
    }
    while (key != 3);
    
    return 0;    
}


Добавлено через 40 минут
На шаблон переделано, осталось как-то реализовать определение типа введенных данных и в зависимости от них кадать в стек элемент того или ониго типа..
mstack.h
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
template <typename T>
struct node
{
    T inf;
    node<T>* next;
};
 
template <typename T>
class mstack
{
private:
    node<T>* head;
public:
    mstack(){head = NULL;}
    ~mstack(){}
    
    void push(T &val)
    {
        node<T>* tmp = new node<T>;
        tmp->inf = val;
        tmp->next = head;
        head = tmp;
    }
    
    void clear()
    {
        while (head->next != NULL)
        {
            node<T>* tmp = head;
            head = head->next;
            delete tmp;
        }
        head = NULL;
    }
    
    bool empty(){return (head == NULL);}
    
    T pop()
    {
        T res = head->inf;
        node<T>* tmp = head;
        head = head->next;
        delete tmp;
        return res;
    }
};

mstack.cpp
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
#include <iostream>
#include "mstack.h"
 
using namespace std;
 
int main()
{
    mstack <int> s;
    int val, key;
    do
    {
        system("cls");
        cout << "\tStack\t\t\t\tmade by TFTM\n\n";
        cout << "1 - push\n";
        cout << "2 - pop & write\n";
        cout << "3 - exit\n\n";
        cout << "press key: ";
        cin >> key;
        switch (key)
        {
            case 1:
                {
                    cout << "\nenter element: ";
                    cin >> val;
                    s.push(val);
                    break;    
                }
            case 2:
                {
                    if (s.empty()) cout << "stack is empty..";
                    else
                    {
                        cout << "poping:\n";
                        while (!s.empty())
                            cout << s.pop() << endl;
                    }
                    system("pause");
                    break;    
                }
            default:
                {
                    if (key == 3) cout << "exiting succesfully..\n";
                    else cout << "press only 1, 2 or 3\n";
                    system("pause");
            }                
        }
    }
    while (key != 3);
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2009, 16:50     шаблоны в си++
Посмотрите здесь:

Шаблоны - C++
Выполнить задание без использования библиотеки стандартных шаблонов. а) Создать шаблонную функцию поиска по заданному ключу. Функция...

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

Шаблоны в C++ - C++
Доброго времени суток! Начал разбираться что такое шаблон и с чем его едят. Загуглил, вставил код из википедии. Ошибка. ...

шаблоны - C++
Помогите пож. разобраться с шаблонами. Шаблоны у которых параметры тоже шаблоны. из книги: tamplate&lt;typenamy T&gt;class Thing здесь...

Шаблоны C++11 - C++
#include &lt;iostream&gt; template&lt;typename T1, typename T2&gt; auto func(T1 a, T2 b) -&gt; decltype(a&gt;b?b:a) { return a&gt;b?b:a; ...

Шаблоны - C++
ругается на строку &quot;friend class List&lt;T&gt;;&quot;, вот что пишет: 1&gt;c:\users\slava\documents\visual studio...

Шаблоны - C++
Добрый день. Не могли бы объяснить вот этот вопрос: Допускают ли шаблоны вложенность описания?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.12.2009, 22:01     шаблоны в си++ #16
outoftime, посмотреть надо не в пхп, а в книгах, посвященных C++.
Контейнер который ты хотел создать небезопасен и очень очень неудобен, так что лучше забей на него, если в нем нет необходимости.
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
13.12.2009, 22:15  [ТС]     шаблоны в си++ #17
а почему небезовасен? (в моем коде)
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.12.2009, 22:38     шаблоны в си++ #18
Твой универсальный стек безопасен, т.к. одновременно он может содержать элементы только одного типа (в зависимости от типа передаваемого в качестве параметра шаблона при создании).
А вот стек который одновременно может содержать элементы различного типа небезопасен только тем фактом что тип элементов неизвестен, соответственно, практически никакая операция не может быть выполнена над ними безопасно. Предположим, захочешь ты распечатать содержание стека, как ты будешь это делать?
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
13.12.2009, 23:54  [ТС]     шаблоны в си++ #19
проверять тип элемента
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.12.2009, 23:57     шаблоны в си++ #20
Два вопроса:
1. Каким образом проверять тип?
2. Ну определил ты что текущий элемент битмап, как ты его выведешь?
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
14.12.2009, 00:05  [ТС]     шаблоны в си++ #21
так-же как и вводил, если у меня в стеке битмап, значит он содержит информацию, которая должна обрабатываться на определенном шаге, получится что-то типа сложной логической системы.. дешифрация мапа, извлечение полезной инфы и т.д.
а тип для встроеных можно, с битмапом - посложнее...
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
14.12.2009, 00:18     шаблоны в си++ #22
В таком издевательстве нету смысла.. Если тебе так охото разный типов то вот
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
#include <iostream>
#include <vector>
 
class base{
public:
    virtual ~base() {}
    virtual void func(){ std::cout << "base\n"; }
};
 
class type_1: public base{
public:
    virtual void func(){ std::cout << "type_1\n"; }
};
 
class type_2: public base{
public:
    virtual void func(){ std::cout << "type_2\n"; }
};
 
class type_3: public base{
public:
    virtual void func(){ std::cout << "type_3\n"; }
};
 
int main(){
 
    std::vector<base*> vec;
    std::vector<base*>::iterator i;
 
    vec.push_back(new type_1);
    vec.push_back(new type_2);
    vec.push_back(new type_3);
 
    for(i = vec.begin(); i != vec.end(); ++i)
        (*i)->func();
 
    for(i = vec.begin(); i != vec.end(); ++i)
        delete (*i);
 
    return 0;
}
Цитата Сообщение от Result
type_1
type_2
type_3
Для продолжения нажмите любую клавишу . . .
Как видишь нету смысла создавать контейнер который сможет хранить в себе разные типы данных..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2009, 00:26     шаблоны в си++
Еще ссылки по теме:

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

шаблоны в си++ - C++
кто может сказать где прблема? List.h #ifndef LIST_H #define LIST_H #include&lt;iostream&gt; #include&lt;ostream&gt; ...

Шаблоны - C++
Здравствуйте не объясните новичку пару аспектов про шаблоны 1)Зачем они нужны 2)Преимущества 3)Синтаксис 4)Маленький примерчик

Шаблоны - C++
Создать параметризированные классы List и ListItem. Классы должны содержать конструкторы, деструкторы, функции add, in, remove, getLength,...

Шаблоны - C++
Пусть есть шаблон-структура. template &lt;class Data&gt; struct A { Data p; }; И есть указатели на объекты: A&lt;int&gt; *b; ...


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

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
14.12.2009, 00:26  [ТС]     шаблоны в си++ #23
да ладно, я только учусь.. просто иногда со своими идеями в дебри залажу)) мжет сказать модерам что-бы создать разделчик, где можно было-бы задачки порешать, типа на самый малый и самый быстрый код для опредиленной задачи..?
а вашу реализацию я недоганяю..
Yandex
Объявления
14.12.2009, 00:26     шаблоны в си++
Ответ Создать тему
Опции темы

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