#include <array>
#include <iostream>
#include <queue>
template <typename T, size_t N = 2>
class CyclicArray {
public:
typedef typename std::array<T, N>::value_type value_type;
typedef typename std::array<T, N>::reference reference;
typedef typename std::array<T, N>::const_reference const_reference;
typedef typename std::array<T, N>::size_type size_type;
void push_back(const T& v) {
if (size_ + 1 == N)
throw;
++size_;
array_[(front_ + size_) % N] = v;
}
void pop_front() {
if (size_ < 1)
throw;
++front_;
--size_;
if (front_ >= N)
front_ = 0;
}
const_reference front() const {
return array_[front_];
}
reference front() {
return array_[front_];
}
size_type size() const {
return size_;
}
private:
size_type front_ = 0;
size_type size_ = 0;
std::array<T, N> array_;
};
int main() {
std::queue<int, CyclicArray<int, 2>> queue;
queue.push(1);
int f = queue.front();
queue.pop();
return 0;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxxdWV1ZT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTiA9IDI+CmNsYXNzIEN5Y2xpY0FycmF5IHsKIHB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6YXJyYXk8VCwgTj46OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6YXJyYXk8VCwgTj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmFycmF5PFQsIE4+Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjphcnJheTxULCBOPjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCiAgdm9pZCBwdXNoX2JhY2soY29uc3QgVCYgdikgewogICAgaWYgKHNpemVfICsgMSA9PSBOKQogICAgICB0aHJvdzsKICAgICsrc2l6ZV87CiAgICBhcnJheV9bKGZyb250XyArIHNpemVfKSAlIE5dID0gdjsKICB9CiAgCiAgdm9pZCBwb3BfZnJvbnQoKSB7CiAgCWlmIChzaXplXyA8IDEpCiAgCSAgdGhyb3c7CiAgCSsrZnJvbnRfOwogIAktLXNpemVfOwogIAlpZiAoZnJvbnRfID49IE4pCiAgCSAgZnJvbnRfID0gMDsKICB9CiAgCiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgewogIAlyZXR1cm4gYXJyYXlfW2Zyb250X107CiAgfQoKICByZWZlcmVuY2UgZnJvbnQoKSB7CiAgCXJldHVybiBhcnJheV9bZnJvbnRfXTsKICB9CiAgCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7CiAgICByZXR1cm4gc2l6ZV87CiAgfQogIAogcHJpdmF0ZToKICBzaXplX3R5cGUgZnJvbnRfID0gMDsKICBzaXplX3R5cGUgc2l6ZV8gPSAwOwogIHN0ZDo6YXJyYXk8VCwgTj4gYXJyYXlfOwp9OwoKaW50IG1haW4oKSB7CglzdGQ6OnF1ZXVlPGludCwgQ3ljbGljQXJyYXk8aW50LCAyPj4gcXVldWU7CglxdWV1ZS5wdXNoKDEpOwoJaW50IGYgPSBxdWV1ZS5mcm9udCgpOwoJcXVldWUucG9wKCk7CglyZXR1cm4gMDsKfQ==