Код:
#include <iostream>
#include <cstring>
using namespace std;
template <class T>
class ochered
{
class chered
{
public:
friend class ochered<T>;
T inf;
chered *nx;
chered():nx(0),inf(T()) {}
~chered() {}
};
public:
class iterator
{
friend class ochered<T>;
public:
chered *the_node;
public:
iterator():the_node(0) {}
iterator(chered *dn): the_node(dn) {}
iterator(const iterator &it):the_node(it.the_node){}
iterator& operator =(const iterator &temp){the_node=temp.the_node; return *this;}
iterator& operator ++() {if(the_node==0) throw empty_chered(); if(the_node->nx==0) throw empty_chered(); the_node=the_node->nx; return *this;}
T& operator *()const {return the_node->inf;}
bool operator !=(const iterator &temp){return (the_node==temp.the_node);}
};
private:
chered *h,*t; //указатели на head и tail очереди
iterator head_iterator;
iterator tail_iterator;
public:
ochered ();
ochered (T k) { add(k);}
~ochered();
bool empty(); //проверка на пустоту
iterator front(){return head_iterator;} //возрврат итератора на начало
iterator rear(){return tail_iterator;} //итератора на конец
void add(T); //функция добавления в очередь
void print(); //функция вывода содержимого очереди
void del_any(); //функция удаления любого элемента из очереди
};
template <class T>
ochered<T>::ochered()
{
h=t=0;
head_iterator=iterator(h);
tail_iterator=iterator(t);
}
template <class T>
ochered<T>::~ochered()
{
chered *temp;
while(h)
{
temp=h->nx;
delete h;
h=temp;
}
}
template <class T>
bool ochered<T>::empty()
{
return h==t;
}
/*template <class T>
iterator ochered<T>::front()
{
return head_iterator;
}
template <class T>
iterator ochered<T>::rear()
{
return tail_iterator;
}*/
template <class T>
void ochered<T>::add(T a)
{ chered *n;
puts("Создание очереди \n");
n=new chered;
n->inf=a;
if (!h) // очерель еще не создана
{
h=t=n; // устанавливаем оба указателя (голова и хвост)
head_iterator=iterator(h); // на единственный элемент очереди
}
else // очередь уже создана
{
t->nx=n; // добавляем очередной элемент в очередь
t=n; // передвигаем указатель на хвост
tail_iterator=iterator(t);
}
}
//*****************************************************
template <class T> void menu(ochered<T>*,int);
int main()
{
int i;
setlocale(LC_ALL,"Russian");
do
{
system("cls");
cout<<"Выберите с каким типом информации в очереди вы хотите работать:\n 1. int\n 2. char\n 3. float\n 4. double \n 5. long int\n 6. Пользовательский тип"<<endl;
cin.clear();
cin.sync();
try
{
cin>>i;
if(cin.fail()) throw myexception();
}
catch(myexception e){e.print();system("pause");}
}while(cin.fail());
switch(i)
{
case 1:{ochered<int> *database=new ochered<int>;
menu(database,1); break;}
case 2:{ochered<char> *database=new ochered<char>; menu(database,2); break;}
case 3:{ochered<float> *database=new ochered<float>; menu(database,3); break;}
case 4:{ochered<double> *database=new ochered<double>; menu(database,4);break;}
case 5:{ochered<long int> *database=new ochered<long int>; menu(database,5);break;}
case 6: {ochered<human> *database=new ochered<human>; menu(database,5); break;}
default: {cout<<"Автоматически очередь будет хранить информацию INT\n"; system("pause"); ochered<int> *database=new ochered<int>; menu(database,1);}
}
}
template <class T>
void menu(ochered<T> *database,int flag)
{
ochered<T>::iterator list_iter;
int button;
T i;
while(1)
{
button=NULL;
system("cls");
cout<<"Выберите желаемое действие с очередью:\n 1. Добавить элемент в очередь\n 2. Просмотр содержимого очереди \n 3. Удаление информации из очереди\n 4. Вывод содержимого через итератор\n 0. Выход";
do
{
cin.clear();
cin.sync();
try
{
cin>>button;
if(cin.fail()) throw myexception();
}
catch(myexception e){e.print();}
}while(cin.fail());
switch(button)
{
case 4: {
for(list_iter=database->front();list_iter!=database->rear();++list_iter)
cout<<*list_iter<<endl;
Вот здесь проблема, пропускает cout и не выводит значение, хот отладчиком все значения хранятся верные
Код:
system("pause");
break;
}
case 0: exit(0);
default: {cout<<"Вы неверное ввели цифру.....Повторите ввод"; system("pause");}
}
}
}