fork(1) download
  1. #include <array>
  2. #include <iostream>
  3. #include <queue>
  4.  
  5. template <typename T, size_t N = 2>
  6. class CyclicArray {
  7. public:
  8. typedef typename std::array<T, N>::value_type value_type;
  9. typedef typename std::array<T, N>::reference reference;
  10. typedef typename std::array<T, N>::const_reference const_reference;
  11. typedef typename std::array<T, N>::size_type size_type;
  12.  
  13. void push_back(const T& v) {
  14. if (size_ + 1 == N)
  15. throw;
  16. ++size_;
  17. array_[(front_ + size_) % N] = v;
  18. }
  19.  
  20. void pop_front() {
  21. if (size_ < 1)
  22. throw;
  23. ++front_;
  24. --size_;
  25. if (front_ >= N)
  26. front_ = 0;
  27. }
  28.  
  29. const_reference front() const {
  30. return array_[front_];
  31. }
  32.  
  33. reference front() {
  34. return array_[front_];
  35. }
  36.  
  37. size_type size() const {
  38. return size_;
  39. }
  40.  
  41. private:
  42. size_type front_ = 0;
  43. size_type size_ = 0;
  44. std::array<T, N> array_;
  45. };
  46.  
  47. int main() {
  48. std::queue<int, CyclicArray<int, 2>> queue;
  49. queue.push(1);
  50. int f = queue.front();
  51. queue.pop();
  52. return 0;
  53. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
Standard output is empty