Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 21:35   #1
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию Не выводит значение через итератор

Код:
#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");}
		}
	}
}
kedbl4 вне форума Ответить с цитированием
Старый 07.12.2009, 21:56   #2
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

не актуально,нашел ошибку
kedbl4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выводит на монитор and77k Общие вопросы C/C++ 2 27.11.2009 10:28
не выводит значение функции... blackbanny Общие вопросы C/C++ 6 17.10.2009 15:19
при добавлении новой записи через форму подставлолось значение из другой таблицы Baxxter Microsoft Office Access 1 07.01.2009 22:23
Не выводит числа в Excel через Delphi Light05 Помощь студентам 4 16.10.2008 10:42
Итератор к шаблону Crucian Общие вопросы C/C++ 5 29.10.2007 16:52