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

Перегрузка функций (Создать класс Set ) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сосчитать количество слов в файле с русским текстом ; количество слов, которые начинаются с заданного буквосочетания. http://www.cyberforum.ru/cpp-beginners/thread896362.html
Нужна программа чтобы нормально работала через Borland c++ Сосчитать количество слов в файле с русским текстом ; количество слов, которые начинаются с заданного буквосочетания.
C++ Описать структуру с именем NOTE Описать структуру с именем NOTE, содержащую поля: - фамилия и имя; - номер телефона; - дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: - ввод с клавиатуры данных в массив, состоящий из 5 структур типа NOTE; - вывод на экран информации о людях, чьи дни рождения совпадают с введенными с клавиатуры; - если таких людей нет, вывести соответствующее... http://www.cyberforum.ru/cpp-beginners/thread896361.html
C++ Завтра курсовая! Составить команду из четырёх лучших бегунов для участия в эстафете 4х100
Элементы вещественного массива размером N содержат результаты забега на 100 м N спортсменов, измеренные в сек. Составить команду из четырёх лучших бегунов для участия в эстафете 4х100 (указать номера четырёх спортсменов). Помогите мне, пожааалуйста.
C++ MPI сложение матриц
Здравствуйте, вот такое задание, посчитать сумму матриц, распараллелив на кластере. Я не могу понять как правильно реализовать этот случай так, что бы автоматически считалось на разном количестве подключаемых узлов, при этом распределить вручную я могу. У меня есть 2 варианта реализации, распределить с помощью функции MPI_Bcast (в этом случае не пойму как можно будет...
C++ Даны неотрицательные целые числа a, b. Найти F(a, b) http://www.cyberforum.ru/cpp-beginners/thread896356.html
Даны неотрицательные целые числа a, b. Найти F(a, b). (Определить вспомогательную функцию, вычисляющую факториал).
C++ не понимаю как открыть исходные файлы не понимаю как открыть исходные файлы подробнее

Показать сообщение отдельно
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
10.06.2013, 06:38     Перегрузка функций (Создать класс Set )
Tigao, реализовал на базе стека. Запала энтузиазма хватило только на +=, -=, <<, +. Потом надоело.
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
#include <iostream>
 
class TSet
{
   protected:
      struct TNode
      {
         int value;
         TNode* next;
 
         TNode(int value, TNode* next = NULL);
      };
      TNode* list;
 
      TNode*& Find(int value);
      void Push(int value);
 
   public:
      TSet();
      TSet(const TSet& set);
      TSet(const int* head, const int* tail);
      ~TSet();
 
      TSet& operator += (int value);
      TSet& operator -= (int value);
 
      friend TSet operator + (const TSet& first, const TSet& second);
      friend std::ostream& operator << (std::ostream& os, const TSet& set);
};
 
//-----------------------------------------------------------------------------
TSet::TNode::TNode(int theValue, TNode* theNext): value(theValue), next(theNext)
{
   ;
}
//-----------------------------------------------------------------------------
TSet::TSet(): list(NULL)
{
   ;
}
//-----------------------------------------------------------------------------
TSet::TSet(const TSet& set): list(NULL)
{
   const TSet::TNode* plist = set.list;
 
   for (; plist; plist = plist->next)
   {
      Push(plist->value);
   }
}
//-----------------------------------------------------------------------------
TSet::TSet(const int* head, const int* tail): list(NULL)
{
   for (; head <= tail; ++head)
   {
      (*this) += *head;
   }
}
//-----------------------------------------------------------------------------
TSet::~TSet()
{
   while (list)
   {
      TNode* node = list;
      list = list->next;
      delete node;
   }
}
//-----------------------------------------------------------------------------
TSet::TNode*& TSet::Find(int value)
{
   TNode** node = &list;
 
   for (; *node && ((*node)->value != value); node = &(*node)->next) { ; }
 
   return *node;
}
//-----------------------------------------------------------------------------
void TSet::Push(int value)
{
   TNode* node = new TNode(value, list);
   list = node;
}
//-----------------------------------------------------------------------------
TSet& TSet::operator += (int value)
{
   if (Find(value) == NULL)
   {
      Push(value);
   }
 
   return *this;
}
//-----------------------------------------------------------------------------
TSet& TSet::operator -= (int value)
{
   TNode*& node = Find(value);
 
   if (node)
   {
      TNode* removed = node;
      node = node->next;
      delete removed;
   }
 
   return *this;
}
//-----------------------------------------------------------------------------
TSet operator + (const TSet& first, const TSet& second)
{
   TSet result(first);
 
   const TSet::TNode* node = second.list;
 
   for (; node; node = node->next)
   {
      result += node->value;
   }
 
   return result;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& os, const TSet& set)
{
   const TSet::TNode* node = set.list;
 
   for (; node; node = node->next)
   {
      os << node->value << ", ";
   }
   os << "\b\b ";
 
   return os;
}
//-----------------------------------------------------------------------------
 
int main()
{
   const int CDataForTest[] = {1, 2, 2, 3, 4, 5, 6, 6, 7, 7 ,7 , 8, 9, 10,
                               1, 2, 2, 3, 4, 5, 6, 6, 7, 7 ,7 , 8, 9, 10,};
 
   TSet first(CDataForTest, CDataForTest + 10);
   TSet second(CDataForTest + 10, CDataForTest + 20);
 
   first += 100;
   second += 200;
 
   first -= 2;
 
   std::cout << "first : " << first << std::endl;
   std::cout << "second : " << second << std::endl;
   std::cout << "first + second: " << (first + second) << std::endl;
 
   return 0;
}
Результат выполнения
 
Текущее время: 14:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru