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

Шаблон очереди с приоритетом и вложенным классом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Можно ли задать такие параметры, чтоб в функции произошла ошибка? http://www.cyberforum.ru/cpp-beginners/thread1499997.html
class TMatrix; class TVector { public: double x; double y; double z; TVector operator * (const TMatrix &Turn); TVector operator * ( double k ); };
C++ WinAPI Как завершить дочернее приложение если родительское было завершено? Ситуация такая. Есть родительское приложение. Оно создаёт дочерний процесс, с которым общается через сокет. Иногда случается, что родительское приложение падает (проблемы разработки или просто сбои). Так вот нужно чтобы дочернее приложение завершалось автоматически, если родительское было завершено, но как такое проделать я не знаю. Просто сигналом из сокета об отсутствии соединеия... http://www.cyberforum.ru/cpp-beginners/thread1499202.html
Написание драйвера для мобильного модема C++
Уважаемые форумчане, кто занимался написанием драйверов для 3g либо 4g usb модема? Можете подсказать, к каким данным мы имеем доступ, то есть конкретно интересует возможность вывести в систему данные о сети (Cell ID, LAC, C1, C2, CRO)? Насколько я знаю, мобильный телефон на основе параметра вышки C2 решает переключиться ли ему к другой базовой станции. Возможно ли получить подобные данные от...
Как посмотреть код ассемблера в Visual Studio 2012? Visual Studio
Есть код программы на C++. Как посмотреть коды ассемблера для этой программы в MS Visual Studio 2012? Добавлено через 3 часа 15 минут Нашёл. Когда запускаешь трассировку программы, нажать ПКМ и выбрать пункт меню Go To Disassembly.
C++ Удаление файлов: типы и способы http://www.cyberforum.ru/cpp-beginners/thread1498584.html
Здравствуйте. Подозреваю что существует несколько методов удаления файлов. Удаление без изменения области памяти в которой хранилось что то (до записи нового файла на это место) и удаление с перезаписью. Подскажите так ли это? Существуют только такие методы удаления? Что из себя представляет удаление без перезаписи (какие именно действия производит ОС?)? Существуют ли API для "полного...
C++ Выделение памяти с помощью new под объекты без вызова их конструкторов здравствуйте, корректен ли следующий код: myClass* pttr = static_cast<myClass*>(::operator new(5 * sizeof(myClass))); for (int i = 0; i < 5; i++){ new(pttr+i) myClass(); } ::operator new(2*sizeof(myClass),pttr + 5); for (int i = 0; i < 5; i++){ (pttr + i)->~myClass(); подробнее

Показать сообщение отдельно
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,116
23.07.2015, 14:53     Шаблон очереди с приоритетом и вложенным классом
но реализовать на практике не могу
наверное как то так можно
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
#include <iostream>
#include <algorithm>
 
namespace cf{
 
    template<class Type>
    class PriorityQueue{
        private:
            struct Pair{
                public:
                    int priority;
                    Type value;
            };
            struct Compare{
                bool operator()(Pair & a, Pair & b){
                    return a.priority > b.priority;
                }
            };
            size_t maxSize;
            size_t nowSize;
            Pair * arr;
            Compare comp;
        public:
            PriorityQueue(){
                maxSize = 10;
                nowSize = 0;
                arr = new Pair[maxSize];
            }
            PriorityQueue(size_t s){
                maxSize = s;
                nowSize = 0;
                arr = new Pair[maxSize];
            }
            PriorityQueue(const PriorityQueue<Type> & source){
                maxSize = source.getMaxSize();
                arr = new Pair[maxSize];
                for(int i = 0; i < maxSize; ++i)
                    arr[i] = source.getData()[i];
                nowSize = maxSize - 1;
            }
            ~PriorityQueue(){
                delete [] arr;
            }
            size_t getMaxSize() const { return maxSize; }
            size_t getSize() const { return nowSize; }
            Pair * getData() const { return arr; }
            PriorityQueue & operator=(PriorityQueue<Type> & source){
                maxSize = source.getMaxSize();
                arr = new Pair[maxSize];
                for(int i = 0; i < maxSize; ++i)
                    arr[i] = source.getData()[i];
            }
            void add(Type val, int p){
                if(nowSize == maxSize - 1){
                    Pair * tempArr = new Pair[maxSize * 2];
                    for(int i = 0; i < maxSize; ++i)
                        tempArr[i] = arr[i];
                    delete [] arr;
                    arr = new Pair[maxSize * 2];
                    for(int i = 0; i < maxSize; ++i)
                        arr[i] = tempArr[i];
                    
                    arr[nowSize].value = val;
                    arr[nowSize].priority = p;
                    ++nowSize;
                    maxSize *= 2;
                    delete [] tempArr;
                }
                else{
                    arr[nowSize].value = val;
                    arr[nowSize].priority = p;
                    ++nowSize;
                    
                }
            }
            Type get(){
                if(nowSize){
                    std::sort(arr, arr + nowSize, comp);
                    return arr[nowSize - 1].value;
                }
                return Type();
            }
            Type pop(){
                if(arr){
                    std::sort(arr, arr + nowSize, comp);
                    --nowSize;
                    return arr[nowSize].value;
                }
                return Type();
            }
            void clear(){
                delete [] arr;
                nowSize = 0;
                maxSize = 10;
                arr = new Pair[maxSize];
            }
    };
}
 
int main()
{
   cf::PriorityQueue<int> q;
   q.add(11,12); // (значение, приоритет(чем меньше значение приоритета тем выше приоритет))
   q.add(10,1);
   q.add(12,2);
   q.add(13,3);
   q.add(14,4);
   q.add(15,5);
   q.add(16,6);
   q.add(17,7);
   q.add(18,8);
   q.add(19,9);
   q.add(20,10);
   q.add(21,11);  
   
   int val = q.get(); // взять без удаления
   std::cout << val << std::endl;
  
  for(int i = 0; i < q.getSize(); ++i){
        std::cout << q.getData()[i].value << " " << q.getData()[i].priority << std::endl;
   }
   
   val = 99999;
   val = q.pop(); // взять с удалением
   std::cout << val << std::endl;
  
  for(int i = 0; i < q.getSize(); ++i){
        std::cout << q.getData()[i].value << " " << q.getData()[i].priority << std::endl;
   }
   
   q.clear(); // очистка
   for(int i = 0; i < q.getSize(); ++i){
        std::cout << q.getData()[i].value << " " << q.getData()[i].priority << std::endl;
   }
 
    return 0;
}
 
Текущее время: 22:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru