Int main()
{tQueue <int> t;
inti;
ifstreamin("data1.txt"); //описываем входной поток и связываем его с data1.txt
while (in.peek()!=EOF) //пока не конец файла
{
in>>i; //считываем из него числа
t.put(i); //кладем их в очередь
}
in.close(); //закрываем файл
ifstreamin1("data2.txt");//описываем входной поток и связываем его с data2.txt
ofstreamout("data1.txt");//описываем выходной поток и связываем его с data1.txt
while (in1.peek()!=EOF) // пока не конец файла data2.txt
{
in1>>i; //считываем из него числа
out<<i<<" "; //записываем в файл data1.txt
}
in1.close();//закрываем файл
out.close();//закрываем файл
ofstreamout1("data2.txt");//описываем выходной поток и связываем его с //data2.txt
while (!t.empty()) //пока очередь не пуста
out1<<t.get()<<" "; //выбираем из нее элементы и записываем в data2.txt
out1.close();();//закрываемфайл
return 0;
}
______data1.txt_________________ ______ data2.txt____________________
7 515 46 46 2 5 8 12 45 6 6
______data1.txt_________________ _______ data2.txt___________________
2 5 8 12 45 6 6 7 515 46 46
2. Дана последовательность натуральных чисел. Создать из них очередь и каждый ее элемент, равный х заменить на элемент равный у. Входная последовательность целых чисел и заданные числа x и y хранятся в файле input.txt, выходная последовательность целых чисел записывается в файл output.txt.
Обратите внимание на то, что в этой и во всех аналогичных упражнениях, если не оговорено иначе, все операции проводятся с очередью, а файлы используются два раза: при создании исходной очереди и при выводе элементов результирующей очереди. Конечно, в данных задачах можно обойтись и вовсе без очереди, просто переписав последовательность числе из одного файла в другой и произведя при переписывании нужные изменения. Однако данный раздел посвящен работе с очередью, и наша задача заключается в том, чтобы отработать именно эти навыки.
#include "exception"
#include "iostream"
#include "fstream"
#include "string"
using namespace std;
class queueException: public exception
{
public:
queueException(const string & message="")
: exception(message.c_str())
{}
};
template <class Item>
class tQueue
{
struct elem
{Item inf; // информационное поле целого типа
elem *next;
elem (Item x):inf(x),next(0)
{}
};
public:
elem *head,*tail;
tQueue():head(0),tail(0){}
bool empty()
{return head==0;}
Item get()
{
if (empty())
throw queueException("StackException: get — queue empty");
else
{
elem *r=head;
Item i=r->inf;
head=r->next;
delete r;
return i;
}
}
void put(Item data)
{elem *t=tail;
tail=new elem(data);
if (!head) head=tail;
else t->next=tail;
}
};
intmain()
{tQueue <int> t,t1; //описываем две очереди целых чисел
int i,x,y;