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

Шаблон set - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа для сравнения линий http://www.cyberforum.ru/cpp-beginners/thread615451.html
Начала изучать С++. Для прохождения практики нужно составить программу, которая открывает xml файл, в котором находятся по 2 пары координат линий. требуется найти среди них совпадающие с некоторой точностью и записать результат в такой же файл. пользователь при запуске должен вводить точность приближения линий. чем дружественнее будет интерфейс, тем лучше. обеспечить адекватную реакцию...
C++ Поле first — целое число, левая граница диапазона, включается в диапазон; поле second — целое число, правая граница диапазона, не включается в диапазо 8. Поле first — целое число, левая граница диапазона, включается в диапазон; поле second — целое число, правая граница диапазона, не включается в диапазон. Пара чисел представляет полуоткрытый интервал [first, second). Реализовать метод rangecheck() — проверку заданного целого числа на принадлежность диапазону. • метод инициализации Init; метод должен контролировать значения аргументов на... http://www.cyberforum.ru/cpp-beginners/thread615411.html
Сохранение функций в переменных и дальнейший их вызов C++
Я тут вспомнил, когда программил в ActionScript 3, там была такая особенность использовать переменные с типом функция. Это очень удобная вещь:))) Интересно возможно ли проделать такое же в С++? #include <iostream> #include <fstream> #include <string> using namespace std; void ddd(int i){ i++;
Поменять местами столбцы в массиве C++
Дан массив размером nxn, насколько я понял динамический. Если количество стобцов четное то поменять столбцы по правилу: первый со вторым, третий с четвертым и так далее. Если количество столбцов нечетное то оставить матрицу без изменений с динамическими массивами у меня трудно, поэтому сделал по шаблону код, поставил условие четности. при запуске ввожу элементы, массив выводится на экран, а...
C++ mutex http://www.cyberforum.ru/cpp-beginners/thread615369.html
День добрый. Прошу объяснить мне дураку m_hShared = OpenMutex(MUTEX_ALL_ACCESS, TRUE, L"FileMutexEx"); if(m_hShared) WaitForSingleObject(m_hShared, INFINITE); m_hShared = CreateMutex(NULL, TRUE, L"FileMutexEx"); Если два раза из одного и того же потока вызвать этот код, то проблема следующая. Во второй раз при вызове CreateMutex возвращается новый...
C++ Ищу информацию про scanf_s Друзья, киньте кто-нибудь ссылку про scanf_s Для ссылок есть поисковые системы! подробнее

Показать сообщение отдельно
diabolik
0 / 0 / 0
Регистрация: 27.06.2012
Сообщений: 7
28.06.2012, 15:00     Шаблон set
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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru