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

Шаблоны.Список - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 09:04     Шаблоны.Список #1
Из входной последовательности целых чисел построить список. Вывести список на экран. Построить еще один новый список, содержащий все положительные числа из исходного списка. Вывести новый список на экран.
Как это написать, с использованием конструкторов, деструкторов и шаблонов!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
 Аватар для Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
09.02.2010, 09:21     Шаблоны.Список #2
C++
1
2
List.push_back();
List.merge();
Или требуется написать свой контейнер?
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 09:42  [ТС]     Шаблоны.Список #3
ну да! нада свою прогу написать....свой контейнер
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.02.2010, 09:52     Шаблоны.Список #4
Газмяс, давай декларацию своего шаблона. Типа:
C++
1
2
3
4
5
6
7
8
9
10
11
template <BaseType> TList
{
 protected:
  BaseType  Info;
  TList    *Next;
 public:
   TList ();
  ~TList ();
  bool push(TBaseType Item);
  bool merge(TList &List);
};
Каких ещё членов не хватает? Дай их имена, типы, опиши по-русски, что и как они должны делать. Попробую сделать реализацию. шаблона списка.
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 10:00  [ТС]     Шаблоны.Список #5
ну тут вобщем такое задание:
Разработать шаблон класса «Односвязный список», включающий в себя необходимый минимум методов, обеспечивающий полноценное функционирование объектов указанно-го класса при их использовании в программе, а именно:
1) конструкторы (по умолчанию, с параметрами, копирования);
2) деструктор;
3) добавление элемента в начало, конец, заданную (по номеру) позицию списка;
4) удаление элемента из начала, конца, заданной (по номеру) позиции списка;
5) поиск элемента – по значению и по номеру;
6) вывод списка на экран.
Разработать программу, содержащую меню, которое позволяет протестировать функции добавления, удаления, поиска и вывода на экран элементов списка.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.02.2010, 10:03     Шаблоны.Список #6
Ну так и разработай сам хотя-бы декларацию.
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 10:05  [ТС]     Шаблоны.Список #7
не умею ((((
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.02.2010, 10:11     Шаблоны.Список #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <TBase> TList
{
 protected:
  TBase  Info;
  TList *Next;
 public:
   TList ();
   TList (TBase Value);
   TList (TList &List);
   TBase &Search(TBase  Value);
   TBase &operator[](int Index);
   TBase &Begin ();
   TBase &End ();
   void Show(); // Выводит в дефолный поток
  ~TList ();
};
Так?
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 10:12  [ТС]     Шаблоны.Список #9
да) а как вместе со всей программой будет выглядеть?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.02.2010, 10:19     Шаблоны.Список #10
До всей проги по-моему ещё не дошли. Раз у тебя список, так надо начинать с декларации, потом реализация.

Добавлено через 1 минуту
TList::TList();
C++
1
2
3
4
TList::TList()
{
 Next=NULL;
}


Добавлено через 1 минуту
TList::TList(TBase Value);
C++
1
2
3
4
5
TList::TList(TBase Value)
{
 Info=Value;
 Next=NULL;
}
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 10:21  [ТС]     Шаблоны.Список #11
а можно пожалуйста еще с комментариями?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.02.2010, 11:09     Шаблоны.Список #12
TList::TList(TList &List);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TList::TList(TBase Value) // Копирующий конструктор
{
 TList *Sourcer=&List; // Указатель на источник
 TList *Target=(TList*)(&Info); // Указатель на приёмник
  while (Source) // Пока не вышел из источника
  {
   Target->info=Sourcer->Info; // Копирую данные
   Sourcer=Sourcer->Next; // Переход к следущему элементу источника
   if (Sourcer) // Если она существует
   {
    Target->Next=new TList; // Создаю элемент приёмника
    Target=Target->Next; // Перехожу к нему
   }
  }
}


Добавлено через 6 минут
TBase TList::TList(TBase Value);
C++
1
2
3
4
5
6
7
8
9
10
11
TBase TList::&Search(TBase  Value) // Поиск
{
 TList Point;  // Указатель
 for (Point=this; Point; Point=Point->Next) // цикл поиска
 {
  if (Value==Point->Info) // Если нашел
  {
   return Point->Value; // Возврат ссылки
  }
 }
}


Добавлено через 4 минуты
TBase TList::&operator[](int Index);
TBase TList::&operator[](int Index) // Поиск по номеру
{
int i; // Номер текущего
TList *Point; // Указатель
for (i=1, Point=this; i<Index; ++i, Point=Point->Next);// Цикл поиска
return Point->Info; // возвращаем результат
}


Добавлено через 53 секунды
TBase TList::&Begin ();
C++
1
2
3
4
5
6
7
8
TBase TList::&Begin () // List.Begin()=Value;
{
 TList *Temp=Next; // Буфер
 Next=new TList; // Создаю новый
 Next->Next=Temp; // После нового второй
 Next->info=Info; // Нвчало копирую в новый
 return Info;
}


Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <TBase> TList
{
 protected:
  TBase  Info;
  TList *Next;
 public:
   TList ();
   TList (TBase Value);
   TList (TList &List);
   TBase &Search(TBase  Value);
   TBase &operator[](int Index);
   TBase &Begin ();
   TBase &End ();
   void Show(); // Выводит в дефолный поток
  TBase &Insert (int Index);
  void DeleteFirst ();
  void DeleteLast ();
  void Delete (int Index);
  ~TList ();
};
Добавлено через 2 минуты
TBase TList::&End ();
C++
1
2
3
4
5
6
7
8
TBase TList::&End ()
{
 TList *Point; // Указатель
 for (Point=this; Point->Next; Point=Point->Next); //Ищу конец
 Point->Next=new TList; // Сщоздаю новый
 Point->Next=NULL; // Новый последний
 return Point->Info; // Возвращаю ссылку
}


Добавлено через 2 минуты
TBase TList::&End ();
C++
1
2
3
4
5
6
7
8
9
10
11
TBase TList::&Insert (int Index)
{
 int I;
 TList *Point; // Указатель
 TList *Temp; // Буфер
 for (i=1, Point=this; i<Index; ++i, Point=Point->Next); //Ищу конец
 Temp=Point->Next; // Запоминаю следующий
 Point->Next=new TList; // Создаю новый
 Point->Next=Temp; // После нового следующий
 return Point->Info; // Возвращаю ссылку
}


Добавлено через 2 минуты
void TList::DeleteFirst ();
C++
1
2
3
4
5
void TList::DeleteFirst ()
{
 info=Next->Info; // Копирую второй в первый
 Next=Next->Next; // Второй становится первым
}


Добавлено через 4 минуты
void TList::DeleteLast ();
C++
1
2
3
4
5
6
void TList::DeleteLast ()
{
 TList *Point; // Указатель
 for (Point=this; Point->Next; Point=Point->Next); // Ищу предпоследний
 delete Point->Next; // Удаляю последний
}


Добавлено через 6 минут
void TList::Delete (int Index);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void TList::Delete (int Index)
{
 int i;
 TList *Point; // Указатель
 TList *Temp; // Указатель
 if (Index==0) // Если удаляем первый
 {
  DeleteFirst(); // Так первый и удаляем
 }
 else // Иначе
 {
  for (i=2, Point=this; i<Index; ++i, Point=Point->Next);// ищем предыдущий
  Temp=Point->Next->Next; // Запоминаем следующий
  delete Point->Next; // Удаляем
  Point->Next=Temp; // Следующий на место этого
 }
}


Добавлено через 2 минуты
TList::~TList();
C++
1
2
3
4
5
6
7
8
9
10
TList::~TList()
{
 TList *Point;
 TList *Temp;
 for (Point=this; Point; Point=Temp)
 {
 Temp=Point
  delete Point;
 }
}


Добавлено через 1 минуту
Кажется так. А чтоб целиком, тебе ещё интерфейс нужен. Но объявить объект надо, кажется, так:
C++
1
TList <int> List;
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 11:44  [ТС]     Шаблоны.Список #13
спасибо большое) сейчас собиру все в единое целое
Sekt
 Аватар для Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
09.02.2010, 14:02     Шаблоны.Список #14
Вам надо научится писать для начала Stack-адаптер контейнера самый простенький.
И 2-3 функции типа Push() Pop() See().Потом братся за лист и что то собирать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2010, 16:22     Шаблоны.Список
Еще ссылки по теме:

Шаблоны С++ C++
Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон C++
C++ [Классы, Наследование, Шаблоны] Добавление записи в список

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

Или воспользуйтесь поиском по форуму:
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
22.02.2010, 16:22  [ТС]     Шаблоны.Список #15
помогите с кодом...выдает ошибки четыре

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
template <BaseType> TList
{
 protected:
  BaseType  Info;
  TList    *Next;
 public:
   TList ();
  ~TList ();
  bool push(TBaseType Item);
  bool merge(TList &List);
};
 
template <TBase> TList
{
 protected:
  TBase  Info;
  TList *Next;
 public:
   TList ();
   TList (TBase Value);
   TList (TList &List);
   TBase &Search(TBase  Value);
   TBase &operator[](int Index);
   TBase &Begin ();
   TBase &End ();
   void Show(); // Выводит в дефолный поток
  ~TList ();
};
 
 
TList::TList()
{
 Next=NULL;
}
 
 
TList::TList(TBase Value)
{
 Info=Value;
 Next=NULL;
}
 
TList::TList(TBase Value) // Копирующий конструктор
{
 TList *Sourcer=&List; // Указатель на источник
 TList *Target=(TList*)(&Info); // Указатель на приёмник
  while (Source) // Пока не вышел из источника
  {
   Target->info=Sourcer->Info; // Копирую данные
   Sourcer=Sourcer->Next; // Переход к следущему элементу источника
   if (Sourcer) // Если она существует
   {
    Target->Next=new TList; // Создаю элемент приёмника
    Target=Target->Next; // Перехожу к нему
   }
  }
}
 
 
TBase TList::&Search(TBase  Value) // Поиск
{
 TList Point;  // Указатель
 for (Point=this; Point; Point=Point->Next) // цикл поиска
 {
  if (Value==Point->Info) // Если нашел
  {
   return Point->Value; // Возврат ссылки
  }
 }
}
 
TBase TList::&operator[](int Index) // Поиск по номеру
{
int i; // Номер текущего
TList *Point; // Указатель
for (i=1, Point=this; i<Index; ++i, Point=Point->Next);// Цикл поиска
return Point->Info; // возвращаем результат
}
 
 
TBase TList::&Begin () // List.Begin()=Value;
{
 TList *Temp=Next; // Буфер
 Next=new TList; // Создаю новый
 Next->Next=Temp; // После нового второй
 Next->info=Info; // Нвчало копирую в новый
 return Info;
}
 
 
template <TBase> TList
{
 protected:
  TBase  Info;
  TList *Next;
 public:
   TList ();
   TList (TBase Value);
   TList (TList &List);
   TBase &Search(TBase  Value);
   TBase &operator[](int Index);
   TBase &Begin ();
   TBase &End ();
   void Show(); // Выводит в дефолный поток
  TBase &Insert (int Index);
  void DeleteFirst ();
  void DeleteLast ();
  void Delete (int Index);
  ~TList ();
};
 
TBase TList::&End ()
{
 TList *Point; // Указатель
 for (Point=this; Point->Next; Point=Point->Next); //Ищу конец
 Point->Next=new TList; // Сщоздаю новый
 Point->Next=NULL; // Новый последний
 return Point->Info; // Возвращаю ссылку
}
 
TBase TList::&Insert (int Index)
{
 int I;
 TList *Point; // Указатель
 TList *Temp; // Буфер
 for (i=1, Point=this; i<Index; ++i, Point=Point->Next); //Ищу конец
 Temp=Point->Next; // Запоминаю следующий
 Point->Next=new TList; // Создаю новый
 Point->Next=Temp; // После нового следующий
 return Point->Info; // Возвращаю ссылку
}
void TList::DeleteFirst ()
{
 info=Next->Info; // Копирую второй в первый
 Next=Next->Next; // Второй становится первым
}
 
void TList::DeleteLast ()
{
 TList *Point; // Указатель
 for (Point=this; Point->Next; Point=Point->Next); // Ищу предпоследний
 delete Point->Next; // Удаляю последний
}
 
void TList::Delete (int Index)
{
 int i;
 TList *Point; // Указатель
 TList *Temp; // Указатель
 if (Index==0) // Если удаляем первый
 {
  DeleteFirst(); // Так первый и удаляем
 }
 else // Иначе
 {
  for (i=2, Point=this; i<Index; ++i, Point=Point->Next);// ищем предыдущий
  Temp=Point->Next->Next; // Запоминаем следующий
  delete Point->Next; // Удаляем
  Point->Next=Temp; // Следующий на место этого
 }
}
TList::~TList()
{
 TList *Point;
 TList *Temp;
 for (Point=this; Point; Point=Temp)
 {
 Temp=Point
  delete Point;
 }
}
TList <int> List;
Yandex
Объявления
22.02.2010, 16:22     Шаблоны.Список
Ответ Создать тему
Опции темы

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