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

Параметризованный класс(поле - список адаптера контейнера - очередь с приоритетом) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка в коде http://www.cyberforum.ru/cpp-beginners/thread961341.html
Дорогие программисты! Помогите пожалуйста юному прогеру понять в чем трабла ) сабж: #include <iostream> using namespace std; unsigned long int Perimeter(unsigned short int length, width); ...
C++ Не могу записать в файл написал программу, числа из одного файла записывать в другой . Вчера работала а седня не работает . помогите, в чем может быть дело?\ #include "stdafx.h" #include "iostream" #include <string> ... http://www.cyberforum.ru/cpp-beginners/thread961340.html
Задача на сортировку строк C++
Задача: в 10 строковых переменных занесите 5 рандомных символов, а потом сортируйте их в порядке возрастания. Помогите советом, пожалуйста-как создать массив строк, и присвоить рандомное значение...
std::map в инлайн-асме C++
Доброго времени суток Имеется MAP-массив содержащий хуки для функций Нужно получить соответствующий адрес в naked функции: std::map<PVOID, PVOID> mHooks; //... __declspec(naked) void...
C++ Наследование http://www.cyberforum.ru/cpp-beginners/thread961291.html
Ребят помогите на основе классе сделать подкласс( наследование на основе добавление элемента методом очереди).Т.е что надо , задаем число н задач, задали приоритет имя, он нам вывел или не вывел...
C++ Ошибка HEAP CORRUPTION Добрый вечер, программисты) Не могли бы вы подсказать новичку, каким образом можно обнаружить ошибку (heap corruption). Трассировка показала, что сообщение выскакивает когда функция test()... подробнее

Показать сообщение отдельно
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228

Параметризованный класс(поле - список адаптера контейнера - очередь с приоритетом) - C++

24.09.2013, 17:23. Просмотров 905. Ответов 8
Метки (Все метки)

Надо реализовать адаптер контейнера: приоритетная очередь на осонове списка. Должно оно быть описано в сообстенном параметризированом классе, со своими методами. Сделал шаблон класса, пытаюсь сделать метод добавления елемента в очередь(в моем методе попросу должнен использоваться стандартый метод push()). Но именно в том месте где прописан етот метод у меня ошибка. Ссылаеться на файл algorithm. В чем дело не могу понять. Почти такая же реализация для обычного контейнера не вызвала ошибок, а вот с адаптерами проблема. Помогите разобраться.

''main.cpp''
Кликните здесь для просмотра всего текста
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
//#include "sourse_1.h"
//#include "sourse_2.h"
//#include "sourse_3.h"
//#include "sourse_4.h"
#include "sourse_5.h"
 
 
void main()
{
    int key;
    while(true)
    {
        cout << "\t1)List - Double;\n\t2)List - Pair(string, double);\n\t3)Parametric list;\n\t4)Container adapter - priority queue;\n\t5)Parametric list adapter container - priority queue;\n\nEnter key: ";
        cin >> key;
        system("cls");
        switch(key)
        {
        /*case 1:
            {
                TASK_1();                   
            }; break;
        case 2:
            {
                TASK_2();
            }; break;
        case 3:
            {
                TASK_3();
            }; break;
        case 4: 
            {
                TASK_4();
            } break;*/
        case 5: 
            {
                TASK_5(); // вызов функции, в которой есть ошибки
            } break;
        }
    }
}


"sourse_5.h"
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <list>
#include <queue>
 
using namespace std;
 
void TASK_5();
 
template <class atype>
class myPriotQueue // шаблон класса, который я делаю
{
    private:
    priority_queue <atype, list<atype>, less<atype> > Queue;   // поле - приоритетная очередь сделанная из списка. 
    public:
        void push_q();
        void pop_q();
        void show_q();
        void ser_arif_q();
        void del_from_diap_q();
        void add_min_max_q();
};
"sourse_5.cpp''
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include "sourse_5.h"
 
 
void TASK_5() // функция, которую вызываю из main 
{
    myPriotQueue<double> mque;  // создаю обьект, полем которого есть очередь из СТЛ
    bool Q = true;
    while(Q == true)
    {
        int key;
        std::cout << "\n\t\t\tMENU\n\t1)PUSH ITEM TO THE QUEUE;\n\t2)POP ITEM FROM THE QUEUE;\n\t3)SHOW ITEMS IN QUEUE;\n\t4)DETERMINE THE AVERAGE ARITHMETIC AND PUSH IT IN THE QUEUE;\n\t5)DELETE ITEM FROM RANGE;\n\t6)ADD SUM MIN AND MAX ITEMS TO ALL ITEMS OF QUEUE;\n\t0)Exit.\n\tEnter key:";
        std::cin >> key;
        switch(key)
        {
            case 1: mque.push_q(); break; // вызов моего метода для обьекта
            //case 2: mque.pop_q(); break;
            //case 3: mque.show_q(); break;
            //case 4: mque.ser_arif_q();break;
            //case 5: mque.del_from_diap_q();break;
            //case 6: mque.add_min_max_q();break;
            case 0: {Q = false;}
        }
        system("cls");
    }
    system("cls");
}
 
template<class atype> 
void myPriotQueue<atype>::push_q()    // мой метод добавления елемента в очередь
{
    cout << "\nFUNCTION PUSH FOR A QUEUE";
    atype val;
    while(true)
    {
        cout << "\nEnter value: ";
        cin >> val;
        Queue.push(val); //<------ тут ошибка, которая ссылаеться на строки в файле algorithm
        char Q = 'y';
        while(true)
        {
            cout << "\nContinue(y/n)?";
            cin >> Q;
            if (Q == 'y')
                break;
            if (Q == 'n')
                break;
            else
            {
                cout << "\nError! Invalid choise. Try again";
                continue;
            }
        }
        if (Q == 'n') 
            break;
    }
    system("pause");
}
//
//template<class atype> 
//void myPriotQueue<double>::pop_q()
//{
//  cout << "\nFUNCTION POP FOR A QUEUE\n";
//  if (mylist.size()==0)
//      cout << "\nError! List is empty.\n";
//  else
//  {
//      mque.pop();
//      cout << "\nItem deleted\n";
//  }
//  system("pause");
//}
//
//template<class atype> 
//void myPriotQueue<double>::show_q()
//{
//  cout << "\nSHOW LIST\n";
//  if (mylist.size()==0)
//      cout << "\nError! List is empty.\n";
//  else
//  {
//      priority_queue <double>::iterator I;
//      for(I = mylist.begin(); I != mylist.end(); I++)
//      {
//          cout << *I << "\t";
//      }
//      cout<<"\n";
//  }
//  system("pause");
//}
//
//template<class atype> 
//void myPriotQueue<double>::ser_arif_q()
//{
//  cout << "\nDETERMINE THE AVERAGE ARITHMETIC AND PUSH IT IN THE BOTTOM OF THE LIST\n";
//  if (mylist.size()==0)
//      cout << "\nError! List is empty.\n";
//  else
//  {
//      double sum=0, ser_arif;
//      list<atype>::iterator S;
//      for(S = mylist.begin(); S != mylist.end(); S++)
//      {
//          sum = sum + *S;
//      }
//      ser_arif = sum / mylist.size();
//      cout << "\nAVERAGE ARITHMETIC = " << ser_arif <<  endl;
//      mylist.push_back(ser_arif);
//  }
//  system("pause");
//}
//
//template<class atype> 
//void myPriotQueuey_prior_queue<double>::del_from_diap_q()
//{
//  cout << "\nREMOVE ITEMS FROM THE SPECIFIED RANGE\n";
//  if (mylist.size()==0)
//      cout << "\nError! List is empty.\n";
//  else
//  {
//      list<atype> mylist_tmp = mylist;
//      double a,b;
//      cout << "\nEnter diapason: \n";
//      cin >> a >> b;
//      if (a > b)
//          swap(a,b);
//
//      int size = mylist.size();
//
//      for (int i = 0; i < size; i++)
//      {
//          mylist.pop_front();
//      }
//  
//      for (int i = 0; i < size; i++)
//      {
//          if (mylist_tmp.front() >= a && mylist_tmp.front() <= b)
//              mylist_tmp.pop_front();
//          else 
//          {
//              double TMP = mylist_tmp.front();
//              mylist.push_back(TMP);
//              mylist_tmp.pop_front();
//          }
//      }
//  }
//  system("pause");
//}
//
//template<class atype> 
//void myPriotQueue<double>::add_min_max_q()
//{
//  cout << "\nADD MIN MAX\n";
//  list<atype>::iterator Q;
//  double min = mylist.front(), max=mylist.front(), sum;
//  int size = mylist/*_tmp*/.size();
//  
//  for (Q = mylist.begin(); Q != mylist.end(); Q++)
//  {
//      if (*Q > max)
//          max = *Q;
//      if (*Q < min)
//          min = *Q;
//  }
//  sum = max+min;
//  cout << "\nMin: " << min << "\nMax: " << max << "\nSum: " << sum << endl;
//  for (Q = mylist.begin(); Q != mylist.end(); Q++)
//  {
//      *Q = *Q + sum;
//  }
//  system("pause");
//}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru