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

Написать шаблонный класс List для работы с одноправленными списками в динамической памяти - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
apteka
3 / 3 / 0
Регистрация: 08.05.2012
Сообщений: 12
23.05.2012, 16:12     Написать шаблонный класс List для работы с одноправленными списками в динамической памяти #1
Для объектов класса List определить операции проверки списка на пустоту, добавления элемента в начало списка, в конец списка, подсчет числа вхождений элемента в список, удаление элемента из списка.
Продемонстрировать работу с шаблонным классом для списка с целыми элементами и с элементами-строками.

Добавлено через 22 часа 12 минут
Очень нужна помощь(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2012, 16:12     Написать шаблонный класс List для работы с одноправленными списками в динамической памяти
Посмотрите здесь:

Шаблонный класс List C++
C++ Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор.
C++ Шаблонный класс list, собственная реализация
C++ Реализуйте интерфейс динамической структуры list для работы с объектами класса А
C++ Класс матрицы, выделение динамической памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 02:16     Написать шаблонный класс List для работы с одноправленными списками в динамической памяти #2
заинтересовало задание, сам бы хотел увидеть его реализацию...
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
14.12.2013, 07:52     Написать шаблонный класс List для работы с одноправленными списками в динамической памяти #3
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
109
110
111
112
113
114
115
#include <iostream>
#include <string>
 
template<class T>
class list
{
public:
    list() : ph(0){}
    void push_front(T const& val)
    {
        node* ptmp = ph;
        ph = new node(val);
        ph->next = ptmp;
    }
    void push_back(T const& val)
    {
        if(!ph)
            ph = new node(val);
        else
        {
            node* ptmp = ph;
            while(ptmp->next)
                ptmp = ptmp->next;
            ptmp->next = new node(val);
        }
    }
    void erase(T const& val)
    {
        while(ph && ph->data == val)
        {
            node* ptmp = ph;
            ph = ph->next;
            delete ptmp;
            ptmp = 0;
        }
 
        node* ptmp = ph;
        while(ptmp && ptmp->next)
        {
            while(ptmp->next && ptmp->next->data == val)
            {
                node* ptmp1 = ptmp->next;
                ptmp->next = ptmp->next->next;
                delete ptmp1;
                ptmp1 = 0;
            }
            ptmp = ptmp->next;
        }
    }
    size_t count(T const& val)const
    {
        node* ptmp = ph;
        size_t cntr = 0;
        while(ptmp)
        {
            if(ptmp->data == val)
                ++cntr;
            ptmp = ptmp->next;
        }
        return cntr;
    }
    bool empty()const
    {
        return !static_cast<bool>(ph);
    }
    void print()const
    {
        node* ptmp = ph;
        while(ptmp)
        {
            std::cout << ptmp->data << '\n';
            ptmp = ptmp->next;
        }
    }
    ~list()
    {
        node* ptmp = 0;
        while(ph)
        {
            ptmp = ph;
            ph = ph->next;
            delete ptmp;
        }
    }
private:
    struct node
    {
        node() : next(0){}
        node(T const& val) : next(0), data(val){}
        T data;
        node* next;
    };
    node* ph;
    list(list const&);
    list& operator=(list);
};
 
int main()
{
    list<int> lst;
    list<std::string> lsts;
    lst.push_back(10);
    lst.push_front(10);
    lst.push_back(10);
    lst.push_back(10);
    lst.erase(10);
    lst.push_back(88);
    lsts.push_back("ggg");
    lst.push_back(16);
    lst.push_back(10);
    lsts.push_front("fff");
    lsts.print();
    std::cout << lsts.count("ff") << '\n';
    return 0;
}
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 10:13     Написать шаблонный класс List для работы с одноправленными списками в динамической памяти #4
отлично!
прокоментируйте, свои переменные "ph" и "ptmp" или это просто так набор букв, для наглядного примера?)
и еще вопрос на засыпку: замечал что в шаблоне вместо "class" исползуют "typename", в чем они отличаются или, может, в чем похожи?
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
14.12.2013, 10:37     Написать шаблонный класс List для работы с одноправленными списками в динамической памяти #5
ptmp это временная переменная для всякой текучки, ph это указатель на головной узел списка.
Насчёт typename vs class
http://blogs.msdn.com/b/slippman/arc...11/212768.aspx
Yandex
Объявления
14.12.2013, 10:37     Написать шаблонный класс List для работы с одноправленными списками в динамической памяти
Ответ Создать тему
Опции темы

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