С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Шаблон set - C++

28.06.2012, 15:00. Просмотров 900. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2012, 15:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон set (C++):

Шаблон класса set - C++
Подскажите, пожалуйста, почему код не компилируется. Ругается на 8-ю строчку #pragma once #include &lt;iostream&gt; #include &lt;deque&gt; ...

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

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

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

Шаблон как тип контейнера 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, который имитировал бы...

1
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
28.06.2012, 18:13 #2
Как помню из собственного опыта операторы перегрузски как-то по разному задаются, сам же всё что в privat прописывал в public и ни каких friend пропысывать не нужно было
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2012, 18:13
Привет! Вот еще темы с ответами:

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

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция - C++
Есть код №1. Он выводить на экран позицию нужного мне слова (только если в середине 1 слово а не 2 и больше например только &quot;privet&quot;. А...

поменять в настройке Character Set на Use Multy-Byte Character Set - C++
При компиляции не видет файла .exe на форуме прочитал , что нужно поменять в настройке Character Set на Use Multy-Byte Character Set ...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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