#include <iostream>
#include <cstdlib>
#include <cassert>
using namespace std;
template<class T>
class queue {
public:
typedef std::size_t size_type;
typedef T value_type;
static const size_type CAPACITY = 30;
queue() {
used = 0;
first = 0;
last = CAPACITY-1;
}
void push(const value_type& entry) {
assert(size() < CAPACITY);
last = next_index(last);
data[last] = entry;
used++;
}
void pop() {
assert(!empty());
first = next_index(first);
used--;
}
value_type front() {
assert(!empty());
return data[first];
}
bool empty() { return (used ==0); }
size_type size() { return used; }
private:
value_type data[CAPACITY];
size_type used;
size_type first;
size_type last;
size_type next_index(size_type i) const {
return (i+1)%CAPACITY;
}
};
int main() {
queue<int> ique;
for(int i = 0; i < 5; i++)
ique.push(i);
cout << "The size of the queue is: " << ique.size() << endl;
while(!ique.empty()) {
cout << ique.front() << endl;
ique.pop();
}
return 0;
}