Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
1

Посоветуйте статьи или книги где есть примеры собственных контейнеров

02.05.2013, 22:39. Просмотров 797. Ответов 10
Метки нет (Все метки)

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

Пример:
Бинарное дерево поиска - шаблонный класс BinaryTree (В нём хранится корень этого дерева, который типа NodeBinaryTree)
Сбалансированное бинарное дерево поиска - шаблонный класс BinaryBalanceTree, который наследует BinaryTree (В нём хранится корень этого дерева, который типа NodeBinarySearchTree)

То есть NodeBinarySearchTree - наследуется от NodeBinaryTree
BinarySearchTree наследуется от BinaryTree


---------------------
По возможности лучше чтобы были попроще контейнеры(там стэки, деки, листы всякие), но чтобы обязательно было вот такая иерархия как я написал выше. Желательно также чтобы были итераторы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2013, 22:39
Ответы с готовыми решениями:

Где есть примеры создания собственных моделей для работы с БД
Где есть примеры создания собственных моделей для работы с БД MySQL? Какие есть бесплатные базы...

Посоветуйте книги по VBA, где были бы описаны все функции и показаны примеры использования этих функций
Дорогие программисты,посоветуйте начинающему программисту книги по VBA,где были бы описаны все...

Небольшой сайт на ASP.NET. Есть ли какие-нибудь обучающие статьи, видеоуроки или книги
Здравствуйте, уважаемые форумчане! Появилась необходимость создать небольшой сайт на ASP.NET,...

Посоветуйте статьи/книги
Посоветуйте что можно почитать про MongoDB, в частности про разворачивание базы на linux в...

10
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.05.2013, 22:42 2
Цитата Сообщение от dovskr Посмотреть сообщение
но чтобы обязательно было вот такая иерархия как я написал выше
чтоб ты красиво слизал? фигушки
0
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
02.05.2013, 23:11  [ТС] 3
Jupiter, Там всё слишком примитивно. Это я и сам могу написать.
Меня по сути же интересует решение следующей проблемы:
Есть базовый класс контейнер.
C++
1
BinaryTree
Есть базовый класс Элемент контенера.
C++
1
NodeBinaryTree
в
C++
1
BinaryTree
используются манипуляции с элементами типа
C++
1
NodeBinaryTree
Когда делаем производный класс от контейнера :
C++
1
class BinarySearchTree: BinaryTree
и делаем производный класс от элемента :
C++
1
 class NodeBinarySearchTree: NodeBinaryTree
, то получаем что
функции в BinaryTree, которые работали с элементами NodeBinaryTree теперь должны работать с элементами NodeBinarySearchTree. И нормально реализовать это вот уже в течении нескольких дней я не могу. Ещё и полная непонятка с итератором, нужно ли его наследовать или должен быть один класс Iterator....
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.05.2013, 23:17 4
а чем отличается NodeBinaryTree от NodeBinarySearchTree?
0
Эксперт С++
1659 / 1031 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
02.05.2013, 23:17 5
Судя по возникшим затруднениям, проблема в дизайне. Возможно, наследование здесь не нужно. Чтобы сказать точнее, хорошо бы узнать: чем отличается NodeBinaryTree от NodeBinarySearchTree, а BinarySearchTree - от BinaryTree?
0
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
02.05.2013, 23:33 6
Цитата Сообщение от Nick Alte Посмотреть сообщение
BinarySearchTree - от BinaryTree?
Всмысле чем отличается BST от обычного бинарного дерева? Методами addItem и search, т.к. BST имеет особую логику хранения данных. Можно легко науглить.
0
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
02.05.2013, 23:37  [ТС] 7
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
template <typename T>       // Элемент двоичного дерева поиска
struct NodeBinaryTree
{
public:
    CTreeElement *Left;
    CTreeElement *Right;
    T Data;
}
 
template <typename T>   // Элемент сбалансированного двоичного дерева поиска
struct NodeSearchBinaryTree :  NodeBinaryTree<T>    
{
public:
    int Height;
}
 
 
 
 
 
 
 
template <typename T>
struct SDictionaryItem
{
public:
    T Word;
    int Count;
};
 
 
template <typename T>
class BinaryTree
{
public:
    NodeBinaryTree<SDictionaryItem<T>> *Root;  // Корень
    typedef CIterator<NodeBinaryTree<SDictionaryItem<T>>> Iterator;
public:
    CTree() : Root(nullptr) {};
    virtual ~CTree();
    void Clear();
    NodeBinaryTree<SDictionaryItem<T>>* GetRoot();
    bool InsertElement(const T &Word);
    bool Empty();
    bool DeleteElement(const T &Word);
    Iterator Begin() const;
    Iterator End() const;
    Iterator Find(T Word) const;
    list<NodeBinaryTree<SDictionaryItem<T>>> GetSortMas() ;
};
 
 
template <typename T>
class BinarySearchTree: BinaryTree<T>
{
      /* Тут мне надо чтобы методы GetRoot и GetSortMas работали и возвращали не    
 NodeBinaryTree<SDictionaryItem<T>>*, а  NodeSearchBinaryTree<SDictionaryItem<T>>*  , 
  то есть чтобы сам их код был такой же, но единственное чем они бы отличались это
тем что работают каждая с соответствующим элементом соответствующего контейнера*/
 
// Тут какие то новые методы производного класса....
}
0
10 / 10 / 0
Регистрация: 13.10.2012
Сообщений: 155
03.05.2013, 00:04 8
Надеюсь поможет, правда тут нет реализации производных классов контейнера.
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <iostream>
 
template <class node, class T>
class iterator
{
public:
 
    iterator(node* n)
    : node_ptr(n)
    {
    }
 
    T* operator * ()
    {
        return node_ptr->get();
    }
 
    T* operator -> ()
    {
        return node_ptr->get();
    }
 
    void operator ++ ()
    {
        node_ptr = node_ptr->next();
    }
 
    iterator operator ++ (int)
    {
        iterator iter(*this);
        ++(*this);
        return iter;
    }
 
    bool operator == (iterator const& i)
    {
        return node_ptr == i.node_ptr;
    }
 
    bool operator != (iterator const& i)
    {
        return !(*this == i);
    }
 
private:
 
    node* node_ptr;
};
 
template <class T>
class list_node
{
public:
 
    list_node(T const& t)
    : object(t)
    , next_node(0)
    {
        
    }
 
    ~list_node()
    {
        delete next_node;
    }
 
    void push_back(T const& t)
    {
        if(next_node)
        {
            next_node->push_back(t);
        }
        else
        {
            next_node = new list_node(t);
        }
    }
 
    list_node* next()
    {
        return next_node;
    }
 
    T* get()
    {
        return &object;
    }
 
private:
 
    T object;
    list_node* next_node;
};
 
template <class T>
class list
{
public:
 
    typedef list_node<T> node;
 
    typedef iterator<node, T> iterator;
 
    list()
    : root(0)
    {
    }
 
    ~list()
    {
        delete root;
    }
 
    void push_back(T const& t)
    {
        if(root)
        {
            root->push_back(t);
        }
        else
        {
            root = new node(t);
        }
    }
 
    iterator begin()
    {
        return iterator(root);
    }
 
    iterator end()
    {
        return iterator(0);
    }
 
private:
 
    node* root;
};
 
int main()
{
    typedef list<std::string> string_container;
    string_container orders;
 
    orders.push_back("First");
    orders.push_back("Second");
    orders.push_back("Third");
    orders.push_back("Fourth");
 
    for(string_container::iterator it = orders.begin(); it != orders.end(); ++it)
    {
        std::cout << it->c_str() << std::endl;
    }
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
03.05.2013, 00:06  [ТС] 9
yol, К сожалению не поможет. Потому как вопрос совсем не в том как написать обычный класс контейнера, элемента контейнера и итератора, а в том как грамотно создать производные классы от контейнера и элемента контейнера
0
Эксперт С++
1659 / 1031 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
03.05.2013, 11:07 10
Цитата Сообщение от Kastaneda Посмотреть сообщение
Можно легко науглить.
Огромное спасибо за этот безусловно ценный совет, он принёс мне огромную, прямо-таки колоссальную пользу. Меня сначала интересовал именно дизайн ТС и причины, по которым он решил применить наследование, но теперь, когда я открыл для себя волнующий мир гугла, всё изменилось коренным образом.
1
Kastaneda
03.05.2013, 12:24     Посоветуйте статьи или книги где есть примеры собственных контейнеров
  #11

Не по теме:

Nick Alte, сарказм понятен, но я ж просто ответил на вопрос

Цитата Сообщение от Nick Alte Посмотреть сообщение
Чтобы сказать точнее, хорошо бы узнать: чем отличается ... BinarySearchTree - от BinaryTree?
:)

0
03.05.2013, 12:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2013, 12:24
Привет! Вот еще темы с ответами:

Посоветуйте книги, где есть раздел "Структуры данных"(Связанные списки, стеки, очереди, деревья)
Посоветуйте книги, где есть раздел &quot;Структуры данных&quot;(Связанные списки, стеки, очереди, деревья),...

Где найти примеры задач из книги Дейтела по C++
Скачал книгу Дейтела на C++ не могу найти примеры задач, мб есть у кого?

Где можно почитать в инете про asp (статьи, книги, сайты)?
Подскажите пожалста, где можно почитать в инете про asp (статьи, книги, сайты). Может кто знает где...

Нужны статьи или примеры связки технологий WCF, ASP.NET MVC и SQL Server
Здравствуйте! Я совершенно не разбираюсь в WCF, а надо уже готовить диплом. Не могли бы вы...


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

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

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