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

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

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

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

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

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


---------------------
По возможности лучше чтобы были попроще контейнеры(там стэки, деки, листы всякие), но чтобы обязательно было вот такая иерархия как я написал выше. Желательно также чтобы были итераторы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.05.2013, 22:39
Ответы с готовыми решениями:

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

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

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

10
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.05.2013, 22:42
Цитата Сообщение от dovskr Посмотреть сообщение
но чтобы обязательно было вот такая иерархия как я написал выше
чтоб ты красиво слизал? фигушки
0
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
02.05.2013, 23:11  [ТС]
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
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.05.2013, 23:17
а чем отличается NodeBinaryTree от NodeBinarySearchTree?
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
02.05.2013, 23:17
Судя по возникшим затруднениям, проблема в дизайне. Возможно, наследование здесь не нужно. Чтобы сказать точнее, хорошо бы узнать: чем отличается NodeBinaryTree от NodeBinarySearchTree, а BinarySearchTree - от BinaryTree?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
02.05.2013, 23:33
Цитата Сообщение от Nick Alte Посмотреть сообщение
BinarySearchTree - от BinaryTree?
Всмысле чем отличается BST от обычного бинарного дерева? Методами addItem и search, т.к. BST имеет особую логику хранения данных. Можно легко науглить.
0
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
02.05.2013, 23:37  [ТС]
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
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163
03.05.2013, 00:04
Надеюсь поможет, правда тут нет реализации производных классов контейнера.
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  [ТС]
yol, К сожалению не поможет. Потому как вопрос совсем не в том как написать обычный класс контейнера, элемента контейнера и итератора, а в том как грамотно создать производные классы от контейнера и элемента контейнера
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
03.05.2013, 11:07
Цитата Сообщение от Kastaneda Посмотреть сообщение
Можно легко науглить.
Огромное спасибо за этот безусловно ценный совет, он принёс мне огромную, прямо-таки колоссальную пользу. Меня сначала интересовал именно дизайн ТС и причины, по которым он решил применить наследование, но теперь, когда я открыл для себя волнующий мир гугла, всё изменилось коренным образом.
1
03.05.2013, 12:24

Не по теме:

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.05.2013, 12:24
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru