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

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

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

Шаблон set - C++

28.06.2012, 15:00. Просмотров 855. Ответов 1
Метки нет (Все метки)

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
#include <iostream>
 
using namespace std;
 
template <class Data> class Set{ 
         class Node{ 
               public:
                      Data d;
                      Node *next, *prev;
                      Node(Data dat = 0){d = dat; next = 0; prev = 0;}
               };
               Node *pbeg, *pend; 
               public:
               Set(){pbeg = 0; pend = 0;}
               ~Set();
               void add(Data d);
               Node * find(Data i);
               Node * insert(Data key, Data d);
               bool remove(Data key); 
               void print(); 
               void print_back();
               };
//---------------------------------------------
template <class Data> 
              Set <Data>:: ~Set(){ 
                
              if (pbeg !=0){
              Node *pv = pbeg; 
              while (pv){
              pv = pv->next; delete pbeg;
              pbeg = pv;}
                            }
              }
            
//.....................
 
template <class Data>
         void Set <Data>::print(){
         Node *pv = pbeg;
         cout<<endl<<"Set: ";
         while (pv){
         cout<<pv->d<<" "; 
         pv = pv->next;} 
         cout<<endl;
 
}
 
//.........................
 
 
 
template <class Data>
         void Set <Data>::add(Data d){
         Node *pv = new Node(d);
         if (pbeg == 0)pbeg = pend = pv;
         else{
         pv->prev = pend; 
         pend->next = pv; 
         pend = pv;}
 
}
 
template <class Data>
         Node * Set <Data>::find(Data d){   /*64 D:\ÁåçûìÿГ*Г*ûé1.cpp expected constructor, destructor, or type conversion before '*' token 
         64 D:\ÁåçûìÿГ*Г*ûé1.cpp expected `;' before '*' token */
         Node *pv = pbeg; while (pv){
         if(pv->d == d)break: pv = pv->next;
                                            }
         return pv;
         }
 
 
 
 
 
 
template <class Data>
         bool Set <Data>::remove(Data key){
         if(Node *pkey = find(key))
         { if (pkey == pbeg){
         pbeg = pbeg->next; pbeg->prev = 0;} 
         else if (pkey = pend){
              pend = pend->prev; pend->next = 0;} 
         else {
              (pkey->prev)->next = pkey->next;
              (pkey->next)->prev = pkey->prev;} 
         delete pkey; return true;} 
         return false;
 
}
 
int main()
{
Set<int> b;
b.add(1);
b.add(1);
b.add(1);
b.add(1);
b.remove(3);
b.print();
getchar();
getchar();
}
заранее прошу извинения у модератора, просьба удалить мою предыдущую тему.

Добавлено через 31 секунду
64 строка в коментах ругательства компиля..

Добавлено через 2 минуты
Был бы благодарен если ктонибуть умный и красивый дописал бы туда функции обьединения, пересечения двух сетов....
и удаление повторяющихся элементов...

Добавлено через 7 часов 2 минуты
up
...
через два часа мне сдавать ТТ

Добавлено через 8 часов 46 минут
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
#include <iostream.h>
#include <conio.h>
#include <string.h>
 
template <class type> class Tset
{private:
         type *contents; 
         int size;
         int sizetek;
         int SetEl(int ind, type m)
             {if(ind<size) {contents[ind]=m; sizetek+=1; return 1;}
             else {cout<<"Г°Г*çìåð Г¬Г*îæåñòâГ* ïðèâûøåГ*"<<endl; return 0;}
             }
         type GetEl(int ind)
         {return contents[ind];}
public:
       Tset(){cout<<"ГЄГ®Г*ñòðóêòîð ГЇГ® óìîë÷Г*Г*ГЁГѕ"<<endl; contents=NULL;}
       Tset(Tset &A);
       Tset(int number)
                {cout<<"ГЄГ®Г*ñòðóêòîð"<<endl;
                contents=new type[size=number]; sizetek=0;}
       ~Tset()
              {cout<<"äåñòðóêòîð"<<endl; delete[] contents;}
       int Getsize()
           {return size;}
       void Add(type m);
       void Del(type m);
       int In(type m);
       int InSet(int Nn);
       void OutSet();
       Tset& CrossSet(Tset &B);
       Tset &operator +(Tset &B);
       Tset &operator =(Tset &B);
       
       friend Tset &operator *(Tset &A, Tset &B);  //
       friend Tset &operator -(Tset &A, Tset &B);
       
};
 
 
 
 
template<class type> Tset<type>::Tset(Tset<type>&A)             
               {cout<<"êîïèðóþùèé ГЄГ®Г*ñòðóêòîð"<<endl;
               contents=new type [size=A.Getsize()];
               sizetek=A.sizetek;
               for(int i=0; i<sizetek;i++) contents[i]=A.contents[i];}
 
template<class type> int Tset<type>::InSet(int Nn)
               {type c; int k=0;
               if(Nn>Getsize()) Nn=Getsize();
               cout<<"Ââåäèòå"<<Nn<<"ýëåìåГ*òîâ Г¬Г*îæåñòâГ*: "<<endl;
               for(int i=0;i<Nn;i++)
                       {cin>>c; if(!In(c)){if(!SetEl(k,c)) return 0; k+=1;}}
               return 1;}
               
template<class type> void Tset<type>::OutSet()
               {cout<<"Ñîäåðæèìîå Г¬Г*îæåñòâГ*: "<<endl;
               if(sizetek!=0){for(int i=0;i<sizetek;i++) cout<<" "<<GetEl(i);}
               else cout<<"Ïóñòîå Г¬Г*îæåñòâî";
               cout<<endl;}
 
template<class type> int Tset<type>::In(type m)
               {for(int i=0; i<sizetek;i++) if(m==GetEl(i)) return 1;
               return 0;}
 
template<class type> void Tset<type>::Add(type m)
               {if(!In(m)) if(sizetek<size) SetEl(sizetek,m);}
 
template<class type> void Tset<type>::Del(type m)
               {int h;
               if(In(m)){h=0;
                         for(int i=0;i<sizetek;i++)
                                 if(h) contents[i-1]=contents[i];
                                 else if(m==GetEl(i)) h=1;
                         sizetek-=1;}
               }
               
template<class type> Tset<type> & Tset<type>::operator =(Tset<type> &B)
               {cout<<"îïåðГ*öèÿ ïðèñâГ*ГЁГўГ*Г*ГЁГї"<<endl;
               if(this==&B) return *this;
               if(contents!=NULL) delete [] contents;
               contents=new type [size=B.Getsize()];
               sizetek=B.sizetek;
               for(int i=0;i<sizetek;i++) {contents[i]=B.contents[i];}
               return *this;}
 
template <class type> Tset<type> & Tset<type>::operator +(Tset<type> &B)
         {for (int i=0; i<B.sizetek;i++) Add(B.GetEl(i));return *this;}
template <class type> Tset<type> &Tset<type>::CrossSet(Tset<type> &B)
         {int i=0;
         do{if(!B.In(GetEl(i))) Del(GetEl(i)); else i++;}
         while (i<sizetek);
         return *this;}
         
template <class type> Tset<type> & operator -(Tset<type> &A, Tset<type> &B)
         {Tset<type> *C=new Tset<type>(A.Getsize());
         for(int i=0; i<A.sizetek;i++) if(!B.In(A.GetEl(i))) C->Add(A.GetEl(i));
         return *C;}
         
template <class type> Tset<type> & operator *(Tset<type> &A, Tset<type> &B)
         {int l;
         if(A.Getsize()>B.Getsize()) l=A.getsize; else l=B.Getsize();
         Tset<type> *C=new Tset<type>(l);
         for(int i=0;i<A.sizetek;i++)
                 {if(B.In(A.GetEl(i))) C->Add(A.GetEl(i));}
         return *C;}
 
int main()
{ int n;
Tset<char> aa(4), bb(7),dd(5),cc;
cout<<"Ââåäèòå ÷èñëî ÷ëåГ*îâ ôîðìèðóåìîãî Г¬Г*îæåñòâГ* n<= ";
cout<<aa.Getsize()<<endl; cin>>n; aa.InSet(n);
cout<<"Ââåäèòå ÷èñëî ÷ëåГ*îâ ôîðìèðóåìîãî Г¬Г*îæåñòâГ* n<= ";
cout<<bb.Getsize()<<endl; cin>>n; bb.InSet(n);
cout<<"Ââåäèòå ÷èñëî ÷ëåГ*îâ ôîðìèðóåìîãî Г¬Г*îæåñòâГ* n<= ";
cout<<dd.Getsize()<<endl; cin>>n; dd.InSet(n);
 
cout<<"ГЊГ*îæåñòâî Г*Г* "<<endl; aa.OutSet();
cout<<"ГЊГ*îæåñòâî bb "<<endl; bb.OutSet();
cout<<"ГЊГ*îæåñòâî dd "<<endl; dd.OutSet();
 
Tset<char> ee=aa*bb;
cout<<"Ïåðåñå÷åГ*ГЁГҐ Г¬Г*îæåñòâ aa ГЁ bb"<<endl; ee.OutSet();
aa=aa+dd;
cout<<"îáúåäèГ*ГҐГ*ГЁГҐ Г¬Г*îæåñòâ aa ГЁ dd"<<endl; aa.OutSet();
cc=dd-bb;
cout<<"äîïîëГ*ГҐГ*ГЁГҐ Г¬Г*îæåñòâ dd ГЁ bb"<<endl; cc.OutSet();
cc.OutSet();
 
 
 
 
getchar();
getchar();
}
Добавлено через 3 минуты
удалил старую прогу написал по новой )))

35
36 строки почемуто ругается...
35 D:\ýòî ðàáîòàåò.cpp [Warning] friend declaration `Tset<type>& operator*(Tset<type>&, Tset<type>&)' declares a non-template function

35 D:\ýòî ðàáîòàåò.cpp [Warning] (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2012, 15:00     Шаблон set
Посмотрите здесь:

Шаблон класса set (множество) - C++
Требуется создать шаблон класса множество... а я без божно туплю, у самого не получилось... нашел на вашем форуме следующий код... исправил...

Создать шаблон класса Set (множество) - C++
Нужно реализовать: Класс •множество set. Дополнительно перегрузить следующие операции: + •добавить элемент в множество (типа item...

Шаблон set и структура - как вместе? - C++
Что-то торможу. typedef set&lt;Node&gt; NodeSet; struct Node{ NodeSet input; NodeSet output; }Как это сделать? Ставлю перед...

Шаблон как тип контейнера std::set - C++
template&lt;class T&gt; int func(T&amp;, int); typedef std::ostream_iterator&lt;int&gt; out_in; int main() { int xx{1, 2, 3, 4, 5, 6, 7, 7,...

Реализовать шаблон класса set, который имитировал бы работу с множествами - C++
Здравствуйте! Кто-нибуть знает, как это делать? Если да подскажите пожалуйста! Реализовать шаблон класса set, который имитировал бы...

На базе контейнера vector из стандартной библиотеки С++ создайте шаблон класса Set, - C++
На базе контейнера vector из стандартной библиотеки С++ создайте шаблон класса Set, в котором каждый объект может храниться только в одной...

контейнер set - C++
Создать контейнер set, ввести в него 3 числа. Создать метод по вычислении наибольшего из этих чисел помогите, пожалуйста, с заданием или...

List и Set - C++
В общем у нас есть отрезок от 1 до X. Отсортировать этот отрезок, вида: (1,х,2,х-1,...). Заполнить этой последовательностью list и set. И...

класс SET - C++
Разработать шаблонный класс Set. Класс должен содержать конструктор по умолчанию, основной конструктор и конструктор копирования....

Set, скорость - C++
Доброго времени суток. Получил задачу написать set, не просто set, а быстрый основанный на бинарном дереве поиска set. Вот что...

Использование set - C++
Приветствую. Что-то я совсем глупый вопрос задам, но понять, где тут ошибка никак не могу: #include &lt;iostream&gt; #include...

Контейнер set - C++
Два множества, элементами которого являются строчные буквы латинского алфавита, представлены с помощью стандартного типа SET. В программе...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
28.06.2012, 18:13     Шаблон set #2
Как помню из собственного опыта операторы перегрузски как-то по разному задаются, сам же всё что в privat прописывал в public и ни каких friend пропысывать не нужно было
Ответ Создать тему
Опции темы

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