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

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

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

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

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

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

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

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


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

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

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

Посоветуйте книги по С++ или по MFC - C++
Многоуважемые посетители данного сайта, не могли бы вы посоветовать мне какие - либо книги по С++ или по MFC. В электронном варианте или...

Где найти Двунаправленное кольцо? у кого есть такое? или есть ссылки где их можно найти? - C++
Можете пожалуйста скинуть примеры задач с Двунаправленным кольцом, или хотябы где их искать. Буду очень благодарен!!!!!!!

Посоветуйте книги или сайты по работе с графикой - C++
Может кто-то посоветовать книги или сайты по работе с графикой в С++. Заранее спасибо.

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

10
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.05.2013, 22:42 #2
Цитата Сообщение от dovskr Посмотреть сообщение
но чтобы обязательно было вот такая иерархия как я написал выше
чтоб ты красиво слизал? фигушки
0
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....
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.05.2013, 23:17 #4
а чем отличается NodeBinaryTree от NodeBinarySearchTree?
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
02.05.2013, 23:17 #5
Судя по возникшим затруднениям, проблема в дизайне. Возможно, наследование здесь не нужно. Чтобы сказать точнее, хорошо бы узнать: чем отличается NodeBinaryTree от NodeBinarySearchTree, а BinarySearchTree - от BinaryTree?
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,274
Записей в блоге: 2
Завершенные тесты: 1
02.05.2013, 23:33 #6
Цитата Сообщение от Nick Alte Посмотреть сообщение
BinarySearchTree - от BinaryTree?
Всмысле чем отличается BST от обычного бинарного дерева? Методами addItem и search, т.к. BST имеет особую логику хранения данных. Можно легко науглить.
0
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>>*  , 
  то есть чтобы сам их код был такой же, но единственное чем они бы отличались это
тем что работают каждая с соответствующим элементом соответствующего контейнера*/
 
// Тут какие то новые методы производного класса....
}
0
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;
}
0
dovskr
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
03.05.2013, 00:06  [ТС] #9
yol, К сожалению не поможет. Потому как вопрос совсем не в том как написать обычный класс контейнера, элемента контейнера и итератора, а в том как грамотно создать производные классы от контейнера и элемента контейнера
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
03.05.2013, 11:07 #10
Цитата Сообщение от Kastaneda Посмотреть сообщение
Можно легко науглить.
Огромное спасибо за этот безусловно ценный совет, он принёс мне огромную, прямо-таки колоссальную пользу. Меня сначала интересовал именно дизайн ТС и причины, по которым он решил применить наследование, но теперь, когда я открыл для себя волнующий мир гугла, всё изменилось коренным образом.
1
Kastaneda
03.05.2013, 12:24     Посоветуйте статьи или книги где есть примеры собственных контейнеров
  #11

Не по теме:

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

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

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

Книги, статьи, сайты по ООП графике - C++
Доброго времени суток, форумчане! Посоветуйте, пожалуйста, сайт или книгу, на русском языке, где исчерпывающе и доходчиво объяснено,...

Посоветуйте новичку книжку или сайт, где описывается создание графического интерфейса в VC - C++
Добрый вечер, подскажите пожалуйста какую нибудь книжку или сайт где описывается создание графического интерфейса в VC.

Посоветуйте сайт или книгу где хорошо изложена информация о ШАБЛОНАХ КЛАССОВ - C++
Посоветуйте сайт или книгу где хорошо изложена информация о ШАБЛОНАХ КЛАССОВ До этого читал: 1) С.Прата &quot;Язык программирования...

Примеры из книги выдают ошибки - C++
я чяйник, хочу выучить програмирование, в железе разбираюсь , хочу выучить с++, сейчас читаю книгу УОЛТЕР САВИЧ ПРОГРАММИРОВАНИЕ С++ 4...


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

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

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