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

Что такое контейнерная библиотека объектов? - C++

Восстановить пароль Регистрация
 
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
15.04.2013, 22:04     Что такое контейнерная библиотека объектов? #1
Доброго времени суток. Возник такой вопрос. По заданию надо выполнять каждую лабораторную в трех вариантах:
"Работы должны быть выполнены в трёх вариантах:
1. с использованием основных положений ООП в соответствии с заданием,
2. с использованием контейнерной библиотеки объектов,
3. с использованием контейнерной библиотеки шаблонов."
Первый вариант, как и третий (это же про STL?) мне ясен. В первом варианте я работы выполнил, в третьем не проблема.
А теперь вопрос. Что такое контейнерная библиотек объектов?
Было бы неплохо, если бы Вы реализовали задание этим вариантом (для наглядности). Например такое:
"Создать класс, отражающий структуру данных согласно выбранному варианту задания. Класс должен содержать методы для чтения, установки и отображения своих данных. Реализовать класс List для управления динамическим списков из элементов созданного класса."
Работа выполненная по первому варианту представлена ниже. Третьим вариантом это с помощью #include <list.h> (в нашем случае). Я правильно понимаю?
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
# include <iostream>
 
using namespace std;
 
struct Date{
    unsigned int day;
    unsigned int month;
    unsigned int year;
};
 
class List{ 
   public:
    Date* date;
    List* next;
    List():next(0) {};
};
 
class inout{
    List* begin;
    List* current; 
    int i;
public:
    inout():begin(0),current(0) {};
    
    ~inout(){   
        while (begin!=0){
            current=begin;
            begin=current->next;
            delete current;
         }
     };
 
    void add() {
        int i=1;
        while (i!=0){
            if (begin==0){
                begin = new List(); 
                begin->date=new Date();
                current=begin;
            }
            else{
                current->next=new List();
                current=current->next; 
                current->date=new Date;
            };
            cout<< "Enter date: "<< endl;
            cin>>current->date->day>>current->date->month>>current->date->year; 
            cout<<"Enter 0 to exit: "<<endl;
            cin>>i;
        };
    };
 
    void out() {
        current=begin;
        while(current!=0){
        cout<<current->date->day<<"."<<current->date->month<<"."<<current->date->year << endl;
        current=current->next;
        };
    };
};
 
int main() {
    inout o;
    o.add();
    o.out();
    return 0;
Добавлено через 1 час 38 минут
Кто знает, что это?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 22:04     Что такое контейнерная библиотека объектов?
Посмотрите здесь:

Что такое 15 - (15/4) *4 ? C++
что такое библиотека (*.LIB) ? C++
C++ Что такое цикл?
C++ Библиотека, что включается при компиляции в исполнимый модуль
Что такое сочетание ^= C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
15.04.2013, 22:57     Что такое контейнерная библиотека объектов? #2
Может быть имеются ввиду контейнеры STL
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
16.04.2013, 00:40  [ТС]     Что такое контейнерная библиотека объектов? #3
Вроде stl это по третьему варианту.

Добавлено через 1 час 32 минуты
Может догадки есть? Или хотя бы чем третий и второй отличаются?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
16.04.2013, 02:37     Что такое контейнерная библиотека объектов? #4
мне кажется ваша задача стояла так:
1) замутить самому класс List
2) воспользоваться STL-ным <list>
3) замутить из своего класса List (1-го задания) шаблонный класс типа template <class T> class List {...};

но могу ошибаться, слишком мутно написано
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
16.04.2013, 09:20     Что такое контейнерная библиотека объектов? #5
Цитата Сообщение от art3330 Посмотреть сообщение
контейнерной библиотеки объектов
Такое, прямо скажем, сочетание слов не является общеупотребительным. Лучше уточнить у преподавателя, что он имеет в виду. Посмотрите конспект, если вы на него не забили. Наверняка там есть определения.

Если считать, что вашей задачей является создание класса для хранения дат в виде связного списка, то последние две ипостаси как раз понятны.
2 -- создать класс List с жестко заданным типом хранимых объектов.
3 -- создать класс List с типом хранимых объектов, заданным шаблонным параметром.

А вот с первым пунктом проблемы, потому что обе реализации будут подходить под первое описание.
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
16.04.2013, 10:41  [ТС]     Что такое контейнерная библиотека объектов? #6
Сделаю я тогда с помощью stl. А там надо будет разузнать.

Добавлено через 1 минуту
Спасибо за помощь =)
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
16.04.2013, 11:09     Что такое контейнерная библиотека объектов? #7
Ну какой STL, когда в задании ясно написано:
Цитата Сообщение от art3330 Посмотреть сообщение
Создать класс, отражающий структуру данных
Цитата Сообщение от art3330 Посмотреть сообщение
Реализовать класс List для управления динамическим списков
Смысл задания в том, чтобы создать два класса -- класс описывающий некую структуру данных (видимо у вас дата) и класс, управляющий динамическим списком, у вас, очевидно, двусвязный.

Кликните здесь для просмотра всего текста
Класс Date, наивная реализация. Шаблонный двусвязный список на итераторах. Не хватает некоторых функций -- собрано на коленке.
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#include <iostream>
 
class Date {
 public:
  Date() : day(1), month(1), year(1971) {}
  Date(unsigned int day, unsigned int month, unsigned int year)
    : day(day), month(month), year(year) {}
  unsigned int getDay() const { return day; }
  unsigned int getMonth() const { return month; }
  unsigned int getYear() const { return year; }
  void setDay(unsigned int value) { day = value; }
  void setMonth(unsigned int value) { day = value; }
  void setYear(unsigned int value) { day = value; }
  static const std::string MONTH_NAMES[12];
 private:
  unsigned int day, month, year;
};
 
const std::string Date::MONTH_NAMES[12] = {"JAN", "FEB", "MAR", "APR",
  "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
 
std::ostream &operator<<(std::ostream &stream, const Date date) {
  return stream << ((date.getDay() < 10) ? "0" : "") << date.getDay() <<
    "." << ((date.getMonth() < 10) ? "0" : "") << date.getMonth() <<
    "." << date.getYear();
}
 
struct ListNodeBase {
  ListNodeBase *prev, *next;
  ListNodeBase() : prev(this), next(this) {}
  ListNodeBase(ListNodeBase *prev, ListNodeBase *next) : prev(prev), next(next) {
    next->prev = prev->next = this;
  }
  virtual ~ListNodeBase() {
    next->prev = prev;
    prev->next = next;
  }
};
 
template <class T>
struct ListNode : public ListNodeBase {
  T value;
  ListNode(ListNodeBase *prev, ListNodeBase *next, const T &value)
    : ListNodeBase(prev, next), value(value) {}
};
 
struct ListIteratorBase {
  ListIteratorBase() : node(0) {}
  ListIteratorBase(ListNodeBase *node) : node(node) {}
  
  void increment() { node = node->next; }
  void decrement() { node = node->prev; }
  
  bool operator==(const ListIteratorBase &other) const {
    return node == other.node;
  }
  bool operator!=(const ListIteratorBase &other) const {
    return node != other.node;
  }
  ListNodeBase *node;
};
 
template <class ValueType, class PointerType, class ReferenceType>
struct ListIterator : public ListIteratorBase {
  typedef ValueType           Value;
  typedef PointerType         Pointer;
  typedef ReferenceType       Reference;
  typedef ListNode<ValueType> Node;
  typedef ListIterator<ValueType, PointerType, ReferenceType> Self;
  typedef ListIterator<ValueType, ValueType*, ValueType&> Iterator;
  typedef ListIterator<ValueType, const ValueType*,
    const ValueType&> ConstIterator;
  
  ListIterator() : ListIteratorBase() {}
  ListIterator(const Iterator &other) : ListIteratorBase(other.node) {}
  ListIterator(ListNodeBase *node) : ListIteratorBase(node) {}
  
  Reference operator*() const { return ((Node*)node)->value; }
  Pointer operator->() const { return &(operator*()); }
 
  Self &operator++() {
    increment();
    return *this;
  }
  Self &operator--() {
    decrement();
    return *this;
  }
  Self &operator++(int) {
    Self result = *this;
    increment();
    return result;
  }
  Self &operator--(int) {
    Self result = *this;
    decrement();
    return result;
  }
  
};
 
template <class T>
class List {
 public:
  typedef T Value;
  typedef T* Pointer;
  typedef T& Reference;
  typedef ListIterator<T, T*, T&> Iterator;
  typedef ListIterator<T, const T*, const T&> ConstIterator;
  
  List() : size(0), base() {}
  List(const List &other) : size(0), base() {
    insert(other.begin(), other.end());
  }
  List &operator=(const List &other) {
    if (this != &other) {
      clear();
      insert(other.begin(), other.end());
    }
    return *this;
  }
  virtual ~List() {
    clear();
  }
  
  Iterator begin() { return (Node*)(base.next); }
  ConstIterator begin() const { return (Node*)(base.next); }
  Iterator end() { return (Node*)(&base); }
  ConstIterator end() const { return (Node*)(&base); }
  
  Iterator insert(Iterator position, const T &value) {
    ++size;
    return new Node(position.node->prev, position.node, value);
  }
  void insert(Iterator position, Iterator first, Iterator last) {
    while (first != last) {
      position = insert(position, *first++);
      ++position;
    }
  }
  Iterator erase(Iterator position) {
    Iterator next = position.node->next;
    delete position.node;
    -- size;
    return next;
  }
  Iterator erase(Iterator first, Iterator last) {
    while (first != last) {
      first = erase(first);
    }
    return first;
  }
  Iterator pushBack(const T &value) {
    return insert(end(), value);
  }
  Iterator pushFront(const T &value) {
    return insert(begin(), value);
  }
  bool isEmpty() const { return base.next == &base; }
  void clear() {
    while (!isEmpty()) {
      delete base.next;
    }
    size = 0;
  }
 private:
  typedef ListNode<T> Node;
  size_t size;
  ListNodeBase base;
};
 
int main(int argc, char *argv[]) {
  List<Date> list;
 
  list.pushBack(Date(10, 12, 2014));
  list.pushBack(Date(4, 7, 2013));
  list.pushBack(Date(1, 7, 2012));
 
  for (List<Date>::ConstIterator i = list.begin(); i != list.end(); ++i) {
    std::cout << *i << std::endl;
  }
  
  std::cin.get();
  return 0;
}
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
16.04.2013, 16:10  [ТС]     Что такое контейнерная библиотека объектов? #8
Спасибо. Попробую разобраться в этом коде =)

Добавлено через 51 минуту
lemegeton, так мне надо выполнить задание тремя способами

Добавлено через 2 часа 41 минуту
То что я в первом посте написал - правильная реализация первым способом

Добавлено через 39 минут
Есть у кого еще догадки?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.04.2013, 16:47     Что такое контейнерная библиотека объектов? #9
art3330, Давайте вы все-таки узнаете у преподавателя, а не будем устраивать здесь игру "Угадайка"
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
16.04.2013, 18:29  [ТС]     Что такое контейнерная библиотека объектов? #10
С преподавателем пересекусь только через неделю, а за это время хотелось бы все сделать.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
17.04.2013, 07:58     Что такое контейнерная библиотека объектов? #11
Цитата Сообщение от art3330 Посмотреть сообщение
То что я в первом посте написал - правильная реализация первым способом
Это прекрасно. Теперь сделайте две реализации класса-контейнера.
Цитата Сообщение от art3330 Посмотреть сообщение
2. с использованием контейнерной библиотеки объектов
Один с привязкой к типу хранимых данных.
Цитата Сообщение от art3330 Посмотреть сообщение
3. с использованием контейнерной библиотеки шаблонов.
Другой без привязки к типу хранимых данных, с шаблонным параметром. Пример есть в моем коде.


Кстати, ваш код класса Date не является классом с точки зрения теории, так как не инкапсулирует свойства.
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
17.04.2013, 11:37  [ТС]     Что такое контейнерная библиотека объектов? #12
Спасибо. Буду делать =)
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
17.04.2013, 11:51     Что такое контейнерная библиотека объектов? #13
тоже мне вот показалось, что задача на понимание отличий шаблонов от обычных классов с заданной структурой и размером.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2013, 12:08     Что такое контейнерная библиотека объектов?
Еще ссылки по теме:

C++ что такое for(;;)
библиотека stdafx.h на MAC OS, что делать?:) C++
C++ Что такое С++ ?

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

Или воспользуйтесь поиском по форуму:
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
17.04.2013, 12:08  [ТС]     Что такое контейнерная библиотека объектов? #14
Наверное так и есть =)
Yandex
Объявления
17.04.2013, 12:08     Что такое контейнерная библиотека объектов?
Ответ Создать тему
Опции темы

Текущее время: 06:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru