| С++ Page 530 |
| /* |
| Проект 12-1 |
| Шаблонный класс очереди. |
| */ |
| #include <iostream> |
| using namespace std; |
| const int maxQsize=100; |
| //Далее создается родовой класс очереди. |
| template <class Qtype> class Queue { |
| QType q[maxQsize]; //массив для хранения очереди |
| int size; /*максимальное число элементов, которые могут находится в очереди*/ |
| int putloc, getloc; //индексы "положить" и "взять" |
| public: |
| //Сконструируем очередь конкретной длины. |
| Queue(int len) { |
| //Размер очереди должен быть меньше max и положителен. |
| if(len>maxQsize) len=maxQsize; |
| else if(len<=0) len=1; |
| size=len; |
| putloc=getloc=0; |
| } |
| //Поместим данное в очередь. |
| void put(QType data) { |
| if(putloc==size) { |
| cout<<"- Очередь полна. "; |
| return; |
| } |
| putloc++; |
| q[putloc]=data; |
| } |
| //Извлечем данное из очереди. |
| QType get() { |
| if(getloc==putloc) { |
| cout<<"-- Очередь пуста. "; |
| return 0; |
| } |
| getloc++; |
| return q[getloc]; |
| } |
| }; |
| //Демонстрация родового класса Queue. |
| int main() |
| { |
| Queue<int>iQa(10), iQb(10); //Создадим две очереди целых чисел |
| iQa.put(1); |
| iQa.put(2); |
| iQa.put(3); |
| iQb.put(10); |
| iQb.put(20); |
| iQb.put(30); |
| cout<<"Содержимое очереди целых чисел iQa: "; |
| for(int i=0; i<3; i++) |
| cout<<iQa.get()<<" "; |
| cout<<endl; |
| cout<<"Содержимое очереди целых чисел iQb: "; |
| for(int i=0; i<3; i++) |
| cout<<iQb.get()<<" "; |
| cout<<endl; |
| Queue<double> dQa(10), dQb(10); /*создадим две очереди чисел с плавающей точкой*/ |
| dQa.put(1.01); |
| dQa.put(2.02); |
| dQa.put(3.03); |
| dQb.put(10.01); |
| dQb.put(20.02); |
| dQb.put(30.03); |
| cout<<"Содержимое очереди чисел с плавающей точкой dQa: "; |
| for(int i=0; i<3; i++) |
| cout<<dQa.get()<<" "; |
| cout<<endl; |
| cout<<"Содержимое очереди чисел с плавающей точкой dQb: "; |
| for(int i=0; i<3; i++) |
| cout<<dQb.get()<<" "; |
| cout<<endl; |
| return 0; |
| } |
Комментарии