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

Шаблонный класс Множества - C++

Восстановить пароль Регистрация
 
wolf1396
5 / 5 / 0
Регистрация: 07.05.2013
Сообщений: 192
12.01.2014, 11:42     Шаблонный класс Множества #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
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
#include "stdafx.h"
#include <iostream>
#include <vector>
 
 
 
using namespace std;
//=============================
 
template <typename T> class Menge
{
/*private:
    vector <T> data;*/
public:
    vector <T> data;
    Menge(int n)
    {
        data.reserve(n);        
        cout << "Введите элементы множества: ";
        T k;
        for(int i=0; i<n; i++)
        {
            cin >> k;
            data.push_back(k);
        }
    }
    ~Menge()
    {
        data.capacity();
    }
 
    //-------
    T Peresechenie(T x, T y)
    {
        vector<T>::iterator it1, it2, it3;
        
        for (it1=x.data.begin(); it1!=x.data.end(); it1++)
        {
            for (it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if(*it1==*it2)
                {
                    *it3=*it1;
                    data.push_back(*it3);
                    it3++;
                }
                else
                {
                    it2++;
                }
            }
        }
        
    }
 
    T Raznost(T& x, T& y, T& r)
    {
        vector<T>::iterator it1, it2;
        for(it1=x.data.begin(); it1!=x.data.end(); it1++)
        {
            r.data.push_back(it1);
        }
        for(it1=r.data.begin(); it1!=r.data.end(); it1++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if (*it1==*it2)
                {
                    r.data.erase(*it1);
                }
                else
                {
                    it2++;
                }
            }
        }
    }
 
    T Obyedinenie(T x, T y, T r)
    {
        vector<T>::iterator it1;
        vector<T>::iterator it2;
        for(it1=x.data.begin(); it1!=x.data.end(); it1++)
        {
            r.data.push_back(it1);
        }
        for(it1=r.data.begin(); it1!=r.data.end(); it1++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if (*it1==*it2)
                {
                    it2++;
                }
                else
                {
                    r.data.push_back(*it2);
                }
            }
        }
    }
 
    T PryamoeProizvedenie(T x, T y, T r)
    {
 
    }
 
    void print()
    {
        vector<T>::iterator it;
        for(it=data.begin(); it!=data.end(); it++)
        {
            cout << *it << " ";
        }
        cout << endl;
    }
 
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    int a=5;
    int b=6;
    int r=a+b;
    Menge<int> A(a);
    A.print();
    Menge<int> B(b);
    B.print();
    Menge<int> R(a);
    R.Peresechenie(A.data,B);
    //R.Raznost(A.data, B.data, R.data);
    //R.Obyedinenie(A.data,B.data);
    //R.PryamoeProizvedenie(A.data,B.data);
    system("pause");
    return 0;
}
суть задания:
реализовать класс "множества", над множествами производить следующие операции:
-пересечение
-объединение
-разность
-прямое произведение

код, кот. написал я выше, он не работает. что нужно передавать в функцию, чтобы все было ок и не было ошибок типа
Кликните здесь для просмотра всего текста
"Menge<T>::Peresechenie: невозможно преобразовать параметр 1 из "std::vector<_Ty>" в "int"
with
1> [
1> T=int
1> ]
1> and
1> [
1> _Ty=int
1> ]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2014, 11:42     Шаблонный класс Множества
Посмотрите здесь:

Переделать класс в шаблонный класс C++
C++ Шаблонный класс
Шаблонный класс C++
C++ Шаблонный класс
Шаблонный класс "множества". Операции над множествами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
12.01.2014, 12:07     Шаблонный класс Множества #2
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
#include <iostream>
#include <vector>
using namespace std;
//=============================
template <typename T> class Menge
{
private:
    vector <T> data;
public:
    //vector <T> data;
    Menge(int n=0)
    {
        if(n>0)
        {
        data.reserve(n);        
        cout << "Введите элементы множества: ";
        T k;
        for(int i=0; i<n; i++)
        {
            cin >> k;
            data.push_back(k);
        }
        }
    }
    ~Menge()
    {
 
    }
 
    //-------
    Menge Peresechenie(Menge y)
    {
        Menge<T> res;
        vector<T>::iterator it1, it2;
        
        for (it1=data.begin(); it1!=data.end(); it1++)
        {
            for (it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if(*it1==*it2)
                    res.data.push_back(*it1);
           }
        }
        return res;        
    }
 
     void print()
    {
        vector<T>::iterator it;
        for(it=data.begin(); it!=data.end(); it++)
        {
            cout << *it << " ";
        }
        cout << endl;
    }
 
};
 
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int a=5;
    int b=6;
    Menge<int> A(a);
    A.print();
    Menge<int> B(b);
    B.print();
    Menge<int> R;
    R=A.Peresechenie(B);
    R.print();
    system("pause");
    return 0;
}
wolf1396
5 / 5 / 0
Регистрация: 07.05.2013
Сообщений: 192
12.01.2014, 12:25  [ТС]     Шаблонный класс Множества #3
Цитата Сообщение от zss Посмотреть сообщение
R=A.Peresechenie(B);
ошибка в библиотеке вектор
Миниатюры
Шаблонный класс Множества  
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
12.01.2014, 13:37     Шаблонный класс Множества #4
У меня VS 2008 ошибка не возникает.
Попробуйте в функцию передать параметр по ссылке
C++
1
Menge Peresechenie(const Menge& y)
Кстати, у меня компилируется только неконстантная ссылка:
C++
1
Menge Peresechenie(Menge& y)
Подскажите кто-нибудь, почему?
wolf1396
5 / 5 / 0
Регистрация: 07.05.2013
Сообщений: 192
12.01.2014, 14:00  [ТС]     Шаблонный класс Множества #5
Цитата Сообщение от zss Посмотреть сообщение
У меня VS 2008 ошибка не возникает.
Попробуйте в функцию передать параметр по ссылке
C++
1
Menge Peresechenie(const Menge& y)
Кстати, у меня компилируется только неконстантная ссылка:
C++
1
Menge Peresechenie(Menge& y)
Подскажите кто-нибудь, почему?
все равно ошибка
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.01.2014, 14:04     Шаблонный класс Множества #6
Цитата Сообщение от zss Посмотреть сообщение
Подскажите кто-нибудь, почему?
А что разве ошибок не пишет?
C++
1
vector<T>::const_iterator it1, it2;
Yandex
Объявления
12.01.2014, 14:04     Шаблонный класс Множества
Ответ Создать тему
Опции темы

Текущее время: 06:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru