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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
#1

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

09.02.2010, 09:04. Просмотров 1496. Ответов 14
Метки нет (Все метки)

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

[Классы, Наследование, Шаблоны] Добавление записи в список - C++
В данной программе используется наследование с применением шаблонов класса. В другой похожей программе не используя наследования программа...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон - C++
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». - C++
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис) - C++
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны - C++
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

Создать список L3 из элементов, входящих и в список L1 и в список L2 - C++
создать список л3 из элементов входящих и в список л1 и в список л2

14
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
09.02.2010, 09:21 #2
C++
1
2
List.push_back();
List.merge();
Или требуется написать свой контейнер?
1
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 09:42  [ТС] #3
ну да! нада свою прогу написать....свой контейнер
0
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);
};
Каких ещё членов не хватает? Дай их имена, типы, опиши по-русски, что и как они должны делать. Попробую сделать реализацию. шаблона списка.
1
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 10:00  [ТС] #5
ну тут вобщем такое задание:
Разработать шаблон класса «Односвязный список», включающий в себя необходимый минимум методов, обеспечивающий полноценное функционирование объектов указанно-го класса при их использовании в программе, а именно:
1) конструкторы (по умолчанию, с параметрами, копирования);
2) деструктор;
3) добавление элемента в начало, конец, заданную (по номеру) позицию списка;
4) удаление элемента из начала, конца, заданной (по номеру) позиции списка;
5) поиск элемента – по значению и по номеру;
6) вывод списка на экран.
Разработать программу, содержащую меню, которое позволяет протестировать функции добавления, удаления, поиска и вывода на экран элементов списка.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.02.2010, 10:03 #6
Ну так и разработай сам хотя-бы декларацию.
1
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 10:05  [ТС] #7
не умею ((((
0
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 ();
};
Так?
1
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 10:12  [ТС] #9
да) а как вместе со всей программой будет выглядеть?
0
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;
}
1
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 10:21  [ТС] #11
а можно пожалуйста еще с комментариями?
0
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;
1
Газмяс
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 93
09.02.2010, 11:44  [ТС] #13
спасибо большое) сейчас собиру все в единое целое
0
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
09.02.2010, 14:02 #14
Вам надо научится писать для начала Stack-адаптер контейнера самый простенький.
И 2-3 функции типа Push() Pop() See().Потом братся за лист и что то собирать.
0
Газмяс
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;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2010, 16:22
Привет! Вот еще темы с ответами:

Шаблоны - C++
При компиляции функция шаблона не выполняется template&lt;class T&gt; void sort_a(T a){ int min,n,m,k,i,j,t; min=0; ...

Шаблоны - C++
Не пойму что я неправильно делаю. Как не переделывал, всё равно не получалось. Может кто сможет чем помочь. А задача следующая-надо было...

Шаблоны С++ - C++
template &lt;typename T_sizeCapacity&gt; class SomeClass { public: T_sizeCacity size; }; Как сделать чтобы T_sizeCapacity мог быть...

Шаблоны C++ - C++
Написал template на С++, но он нифига не компилица, пишет мол типа не могу string в int преобразовать в строчке int out_param = (int)param;...


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

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

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