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

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

Войти
Регистрация
Восстановить пароль
 
dovskr
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
#1

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

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

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

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

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


---------------------
По возможности лучше чтобы были попроще контейнеры(там стэки, деки, листы всякие), но чтобы обязательно было вот такая иерархия как я написал выше. Желательно также чтобы были итераторы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 22:39     Посоветуйте статьи или книги где есть примеры собственных контейнеров
Посмотрите здесь:

C++ Примеры из книги выдают ошибки
Посоветуйте книги по С++ или по MFC C++
С++ - с какой книги начать и в каком ide прорабатывать примеры C++
C++ Книги, статьи, сайты по ООП графике
C++ Подскажите где ошибка, или может есть другой вариант реализации кода
C++ Посоветуйте книгу где хорошо описано внешнее сортировки, или хеширования
C++ Посоветуйте книги или сайты по работе с графикой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.05.2013, 22:42     Посоветуйте статьи или книги где есть примеры собственных контейнеров #2
Цитата Сообщение от dovskr Посмотреть сообщение
но чтобы обязательно было вот такая иерархия как я написал выше
чтоб ты красиво слизал? фигушки
dovskr
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....
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.05.2013, 23:17     Посоветуйте статьи или книги где есть примеры собственных контейнеров #4
а чем отличается NodeBinaryTree от NodeBinarySearchTree?
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
02.05.2013, 23:17     Посоветуйте статьи или книги где есть примеры собственных контейнеров #5
Судя по возникшим затруднениям, проблема в дизайне. Возможно, наследование здесь не нужно. Чтобы сказать точнее, хорошо бы узнать: чем отличается NodeBinaryTree от NodeBinarySearchTree, а BinarySearchTree - от BinaryTree?
Kastaneda
Форумчанин
Эксперт С++
4469 / 2831 / 224
Регистрация: 12.12.2009
Сообщений: 7,201
Записей в блоге: 1
Завершенные тесты: 1
02.05.2013, 23:33     Посоветуйте статьи или книги где есть примеры собственных контейнеров #6
Цитата Сообщение от Nick Alte Посмотреть сообщение
BinarySearchTree - от BinaryTree?
Всмысле чем отличается BST от обычного бинарного дерева? Методами addItem и search, т.к. BST имеет особую логику хранения данных. Можно легко науглить.
dovskr
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>>*  , 
  то есть чтобы сам их код был такой же, но единственное чем они бы отличались это
тем что работают каждая с соответствующим элементом соответствующего контейнера*/
 
// Тут какие то новые методы производного класса....
}
yol
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;
}
dovskr
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
03.05.2013, 00:06  [ТС]     Посоветуйте статьи или книги где есть примеры собственных контейнеров #9
yol, К сожалению не поможет. Потому как вопрос совсем не в том как написать обычный класс контейнера, элемента контейнера и итератора, а в том как грамотно создать производные классы от контейнера и элемента контейнера
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
03.05.2013, 11:07     Посоветуйте статьи или книги где есть примеры собственных контейнеров #10
Цитата Сообщение от Kastaneda Посмотреть сообщение
Можно легко науглить.
Огромное спасибо за этот безусловно ценный совет, он принёс мне огромную, прямо-таки колоссальную пользу. Меня сначала интересовал именно дизайн ТС и причины, по которым он решил применить наследование, но теперь, когда я открыл для себя волнующий мир гугла, всё изменилось коренным образом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2013, 12:24     Посоветуйте статьи или книги где есть примеры собственных контейнеров
Еще ссылки по теме:

C++ Посоветуйте сайт или книгу где хорошо изложена информация о ШАБЛОНАХ КЛАССОВ
C++ Посоветуйте литературу или статьи по правильному составлению архитектуры кода программ
C++ Примеры из книги не для установленного компилятора. Что поменять?
Где найти примеры задач из книги Дейтела по C++ C++
Ищу книги, статьи, сайты (хочу стать программистом и не знаю с чего начать) C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
03.05.2013, 12:24     Посоветуйте статьи или книги где есть примеры собственных контейнеров
  #11

Не по теме:

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

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

Yandex
Объявления
03.05.2013, 12:24     Посоветуйте статьи или книги где есть примеры собственных контейнеров
Ответ Создать тему
Опции темы

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