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

Шаблонный класс "множества". Операции над множествами - C++

Восстановить пароль Регистрация
 
Wwarhazardd
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 7
08.01.2014, 22:15     Шаблонный класс "множества". Операции над множествами #1
Доброго времени суток. Суть моего задания заключается в создании шаблонного класса "множества" и затем операции над этими множествами(пересечение, объединение, разность, прямое произведение). Я пока пытаюсь написать код для реализации "пересечения" 2х множеств. Прошу указать на мои ошибки, помочь доработать код..
(я написал класс(нужно написать еще конструктор класса), шаблонную функцию для пересечения, и заполнение 2х массивов(множеств), не знаю что делать дальше, как передать эти 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
75
76
#include "stdafx.h"
#include <iostream>
 
using namespace std;
template <class T> class CMnogestvo
{
    private:
 
    public:
    T Mn1;   //1 множество
    T Mn2;   //2ое
    T Rez;    //результат
    int n;
    CMnogestvo();
    ~CMnogestvo();
 
    void intersection(T Mn1,T Mn2,T Rez);
};
 
template <class T> 
void CMnogestvo<T>::intersection(T Mn1,T Mn2,T Rez)  //функция пересечение
{   
    if (sizeof(Mn1)>sizeof(Mn2))
    {
        n=Mn1;
    }
    else
    {
        n=Mn2;
    }
 
    Rez= new T[n];
    for (int i=0; i < sizeof(Mn1); i++)
    {
        for (int j=0; j < sizeof(Mn2); j++) 
        {
            if (Mn1[i]==Mn2[j])
            {
                Rez[j]=Mn2[j];
            }
            else
            {
                j++;
            }
        }
    }
 
    for (int i=0;i<n;i++)
    {
        cout<<Rez[i];
    }
    delete [] rez;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE,"rus");
    int A[5];
    int B[5];
    int Rezz[10];
    cout<<"Введите множество A из 5 эл"<<endl;
 
    for (int i=0;i<5;i++)
    {
        cin>>A[i];
    }
 
    cout<<"Введите множество B из 5 эл"<<endl;
 
    for (int i=0;i<5;i++)
    {
        cin>>B[i];
    }
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 22:15     Шаблонный класс "множества". Операции над множествами
Посмотрите здесь:

C++ Операции над множествами!
C++ Операции над множествами
Разработать шаблонный класс "дек" на основе односвязного списка C++
C++ Операции над множествами
Операции над множествами. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
08.01.2014, 22:30     Шаблонный класс "множества". Операции над множествами #2
http://en.cppreference.com/w/cpp/alg...t_intersection

Добавлено через 48 секунд
P.S. смотрите реализацию, сделаете тоже для ваших нужд.
Wwarhazardd
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 7
08.01.2014, 22:41  [ТС]     Шаблонный класс "множества". Операции над множествами #3
Я читал это, дело в том что здесь просто использование стандартных шаблонных функций библиотеки STD. А мне нужно написать именно шаблонный класс. Немного другая задача, или я чего-то не понимаю?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
08.01.2014, 22:59     Шаблонный класс "множества". Операции над множествами #4
вот тупо скопировал реализацию их ссылки:
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
#include <iostream>
 
template<class InputIt1, class InputIt2, class OutputIt>
OutputIt set_intersection(InputIt1 first1, InputIt1 last1,
                          InputIt2 first2, InputIt2 last2,
                          OutputIt d_first)
{
    while (first1 != last1 && first2 != last2) {
        if (*first1 < *first2) {
            ++first1;
        } else  {
            if (!(*first2 < *first1)) {
                *d_first++ = *first1++;
            }
            ++first2;
        }
    }
    return d_first;
}
 
 
int main()
{
  int A[5];
  int B[5];
  int Rezz[10];
 
  //std::cout<<"Введите множество A из 5 эл"<<std::endl;
  for (int i=0;i<5;i++)
  {
    //cin>>A[i];
    A[i] = i;
  }
 
  //std::cout<<"Введите множество B из 5 эл"<<std::endl;
  for (int i=0;i<5;i++)
  {
    //cin>>B[i];
    B[i] = i + 3;
  }
 
  const int* end = set_intersection(&A[0], &A[0] + 5, &B[0], &B[0] + 5, &Rezz[0]);
  int ii = end - Rezz;
  for (int* it = Rezz; it != end; ++it)
  {
    std::cout << *it << " ";
  }
  std::cout << std::endl;
 
  return 0;
}
то, что вы написали - какая-то хрень. мне не совсем понятно зачем под это дело класс мутить.
но если очень хочется - то можно. попробуйте адаптировать пример под свои нужды
Yandex
Объявления
08.01.2014, 22:59     Шаблонный класс "множества". Операции над множествами
Ответ Создать тему
Опции темы

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