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

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

02.05.2013, 22:39. Показов 1304. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru