IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> шаблон класса очередь на С++, может у кого есть?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


Нужен очень шаблон класса "очередь" на С++, с простыми операциями, такими как вставить новый элемент в очередь, взять вершину очереди, проверка на пустоту очереди, размер очереди, вывод элементов и т.п. Может у кого есть что-нить подобное? smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


С шаблонами и классами работаю первый раз. Попытался написать очередь через массив.
Не понимаю, почему функции showHead () и showTail () работают не так… nea.gif
И вообще, если кто может проверьте правильность реализации…smile.gif
Компилятор Dev-C++.


/*

Шаблон очереди и модуль тест.
Язык реализации: С++

*/

#include <iostream>

// размер массива (по умолчанию) под очередь
#define N 10

using namespace std;

//////////////////////////////////////////////////////////
// Начало шаблона
//////////////////////////////////////////////////////////


template <class T>
class queue {

private :

T *q; // указатель на массив
int begin; // первый элемент очереди
int end; // последний элемент очереди

public :

queue (void); // конструктор
~queue (); // деструктор
bool isEmpty (); // проверка на пустоту
T size (); // количество элементов в очереди
T pop (void); // взятие элемента
void push (T i); // добавление элемента
T showHead (); // посмотреть первый элемент
T showTail (); // посмотреть последний элемент
T makeEmpty (); // очистить очередь
};


// конструктор
template <class T>
queue <T> :: queue (void) {
if (!(q = new T[N])) {
cout << "Can't create array, because hav't free memory!\n";
return;
}
begin = end = 0;
cout << "Initialization ok.\n";
}

// дестуктор
template <class T>
queue <T> :: ~queue () {
delete q;
cout << "\nDestroyed.";
}

// проверка на пустоту
template <class T>
bool queue <T> :: isEmpty () {
return begin;
}

// размер очереди
template <class T>
T queue <T> :: size () {
return (begin-end);
}

// заполнение очереди
template <class T>
void queue <T> :: push (T i) {
if (begin == N) {
cout << "Full.\n";
return;
}
q[begin++] = i;
}

// вынимает элемент
template <class T>
T queue <T> :: pop (void) {
if (begin == end) {
cout << "Empty.\n";
return 0;
}
return q[end++];
}

//////////////////////////////////////////
// НЕ РАБОТАЕТ!!!
/////////////////////////////////////////

// посмотреть первый элемент
template <class T>
T queue <T> :: showHead () {
cout << "\nHead - " << q[end];
}

// посмотреть хвост
template <class T>
T queue <T> :: showTail () {
if (begin == end) {
cout << "\nTail - " << q[begin];
}
else cout << "\nTail - " << q[begin-1];
}

// очистка очереди
template <class T>
T queue <T> :: makeEmpty () {
begin = 0;
end = 0;
}


//////////////////////////////////////////////////////////
// Конец шаблона
//////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////
// Начало модуль теста
//////////////////////////////////////////////////////////


int main(int argc, char *argv[])
{

// создаем объекты
queue <int> a;
queue <double> b;
queue <long int> c;

// начинаем тестировать работу
cout << "Now queue is empty (return 0):";
cout <<"\n" << a.isEmpty();

for (int i = 0; i < N; i++) {
a.push(i);
}

a.showHead();
cout << "\n" <<a.size();
cout <<"\n" << a.isEmpty();
a.showTail();

// вынимаем элементы очереди
cout << endl;
for (int i = 0; i < N; i++) {
cout << a.pop() << " ";
}

// функции не правильно работают
a.showHead();

b.showHead();
b.showTail();

b.push(2.5);
b.push(3.5);
b.push(6.89);

cout << "\n" << b.size();

b.showHead();
b.showTail();
cout << "\n" <<b.pop() << " ";
cout << "\n" <<b.pop() << " ";
cout << "\n" <<b.pop() << " ";
cout << "\n" << b.size();
// явный вызов деструктора
a.~queue();
b.~queue();

system("PAUSE");
return EXIT_SUCCESS;
}

//////////////////////////////////////////////////////////
// Конец модуль теста и программы
//////////////////////////////////////////////////////////



--------------------
Я не боюсь казаться смешным. Хмм..это не каждый может себе позволить...
Чтобы избежать критики, ничего не делайте, ничего не говорите, будьте никем...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
lays   шаблон класса очередь на С++   23.12.2006 15:19
мисс_граффити   в FAQ есть это все на паскале. Ну и поиском пользу…   23.12.2006 15:35
volvo   Здесь выкладывался шаблонный class TQueue: моделир…   23.12.2006 16:47
w@rlock   С шаблонами и классами работаю первый раз. Попытал…   7.01.2007 20:43
volvo   Измени showHead вот так, и посмотри, ЧТО ты пытаеш…   7.01.2007 21:16
w@rlock   volvo Да и правда… :) Но теперь вообще запутался…К…   8.01.2007 0:14
Алена   Значит, так... Проблема - в том, что такой способ…   8.01.2007 0:59
w@rlock   Большое спасибо :) Вот эту функцию можно пояснить…   8.01.2007 23:28
volvo   Что такое: [code=cpp]T value = q[begin]; ?Запомин…   8.01.2007 23:38
lays   Алена, volvo, w@rlock здорово :) :good: правда …   8.01.2007 23:36
lays   volvo спасибо. :cool: :) но почему ++i, а не i…   9.01.2007 1:46
volvo   А для отдельно стоящего оператора это не играет ро…   9.01.2007 3:07
lays   да. но ведь в данном примере в цикле pop при ++i з…   9.01.2007 18:04
volvo   for(int i = 0; i < end; ++i) q[i] = q[i + 1];ан…   9.01.2007 18:22
w@rlock   а вот если ещё конструктор копирования написать св…   10.01.2007 21:55
w@rlock   Писал-писал этот шаблон, а так и не сдал :( Сказал…   11.01.2007 18:57
volvo   Ссылка на то, как правильно - в третьем сообщении …   11.01.2007 19:01
w@rlock   он у меня не компилится просто...:( тем более как …   11.01.2007 19:15
lays   Я тут тоже очередь пытаюсь всё сделать (некоторые …   12.01.2007 3:14
volvo   Не знаю, что там может НЕ компилиться... Вот выдра…   12.01.2007 6:11
Bokul   Извиняюсь за оффтоп: Где его можно скачать? Он к…   12.01.2007 6:27
volvo   Компилит, причем ТОЛЬКО под ДОС... Качать здесь: h…   12.01.2007 6:44


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 4.05.2024 1:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name