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

Напишите шаблон класса односвязного списка, который принимает элементы любого типа - C++

Восстановить пароль Регистрация
 
Paradise9999
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 21
05.05.2014, 20:31     Напишите шаблон класса односвязного списка, который принимает элементы любого типа #1
Ребята, помогите. Надо решить следующую задачу:

Напишите шаблон класса односвязного списка, который принимает элементы любого типа. В классе реализуйте функции для работы с односвязным списком.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2014, 20:31     Напишите шаблон класса односвязного списка, который принимает элементы любого типа
Посмотрите здесь:

напишите пример односвязного списка C++
C++ Шаблон для односвязного списка
C++ шаблон односвязного списка
C++ Разработать шаблон класса для реализации односвязного списка
Напишите перегруженную функцию power (), которая принимает два целочисленных параметра типа int и возвращает целочисленное значение типа int C++
Спроектировать шаблон класса spisok для реализации односвязного линейного списка. Не работает сортировка C++
C++ Шаблон для односвязного списка
Напишите класс «Стек» для целочисленных данных на основе односвязного списка C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
05.05.2014, 22:52     Напишите шаблон класса односвязного списка, который принимает элементы любого типа #2
list.hpp
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
116
117
118
119
120
121
#pragma once
 
#include <cassert>
 
namespace op {
 
template <class T>
class OneLinkedList {
private:
    struct Node {
        T     value;
        Node *next;
        Node(const T & val, Node * nex) : value(val), next(nex) {}
    };
    Node * mHead;
    int    mCount;
public:
    class Iterator {
    public:
        Iterator(Node* curr) : mCurr(curr) {}
        T & operator*() {
            assert(mCurr != NULL);
            return mCurr->value;
        }
        const T & operator*() const {
            assert(mCurr != NULL);
            return mCurr->value;
        }
        void operator++() const {
            assert(mCurr != NULL);
            mCurr = mCurr->next;
        }
        bool operator==(const Iterator & other) const {
            return (mCurr == other.mCurr);
        }
        bool operator!=(const Iterator & other) const {
            return (mCurr != other.mCurr);
        }
    private:
        mutable Node * mCurr;
    };
 
    typedef Iterator iterator;
    typedef const Iterator const_iterator;
    typedef T& reference;
    typedef const T& const_reference;
    typedef T* pointer;
    typedef const T* const_pointer;
 
    const_reference front() const {
        assert(mHead != NULL);
        return mHead->value;
    }
    reference front() {
        assert(mHead != NULL);
        return mHead->value;
    }
 
    iterator begin() {
        return Iterator(mHead);
    }
    iterator end() {
        return Iterator(NULL);
    }
    const_iterator begin() const {
        return Iterator(mHead);
    }
    const_iterator end() const  {
        return Iterator(NULL);
    }
    void remove(const iterator & o) {
        for (Node * n = mHead, *p = 0; n; p=n, n=n->next) {
            if (n->value == *o) {
                (p ? p->next : mHead) = n->next;
                --mCount;
                delete n;
                return;
            }
        }
    }
 
    OneLinkedList() : mHead(0), mCount(0) {}
    ~OneLinkedList() { destroy(mHead); }
 
    void destroy(Node* r) {
        Node * n = r;
        while (n) {
            r = n;
            n = n->next;
            delete r;
        }
    }
    void insert(const T & value) {
        mHead = new Node(value, mHead);
        ++mCount;
    }
    void remove(const T & value) {
        for (Node * n = mHead, *p = 0; n; p=n, n=n->next) {
            if (n->value == value) {
                (p ? p->next : mHead) = n->next;
                --mCount;
                delete n;
                return;
            }
        }
    }
    bool contains(const T & value) const {
        for (const iterator & b = begin(), & e = end(); b != e; ++b) {
            if (*b == value) return true;
        }
        return false;
    }
    bool empty() const {
        return (mHead == 0);
    }
    int size() const {
        return mCount;
    }
};
 
} // namespace op
Использование (для Google Test):
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
// ...
 
TEST(List, oneLinked) {
    op::OneLinkedList<int> list;
    ASSERT_TRUE(list.empty());
    for (int i = 0; i < 10; ++i) {
        list.insert(i);
    }
    ASSERT_FALSE(list.empty());
    for (int i = 0; i < 10; ++i) {
        ASSERT_TRUE(list.contains(i));
        list.remove(i);
        ASSERT_FALSE(list.contains(i));
    }
    ASSERT_TRUE(list.empty());
}
 
TEST(List, oneLinkedIteratorTraverse) {
    op::OneLinkedList<int> list;
    ASSERT_TRUE(list.empty());
    for (int i = 0; i < 10; ++i) {
        list.insert(i);
    }
    ASSERT_FALSE(list.empty());
 
    ASSERT_TRUE(list.contains(9));
    list.front() = 99;
    ASSERT_TRUE(list.contains(99));
    ASSERT_FALSE(list.contains(9));
 
    int count = 0;
    op::OneLinkedList<int>::iterator it = list.begin(), ie = list.end();
    for (; it != ie; ++it, ++count) {
        *it = 99;
        std::cout << (*it) << std::endl;
    }
    ASSERT_EQ(list.size(), count);
}
 
// ...
Paradise9999
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 21
06.05.2014, 03:05  [ТС]     Напишите шаблон класса односвязного списка, который принимает элементы любого типа #3
Чего так много кода, меня препод сожрёт же.
Но всё рано огромное спасибо
Yandex
Объявления
06.05.2014, 03:05     Напишите шаблон класса односвязного списка, который принимает элементы любого типа
Ответ Создать тему
Опции темы

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