queue.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include <vector>
  2. #ifndef ASJ_QUEUE
  3. #define ASJ_QUEUE
  4. template<typename T>
  5. class Queue {
  6. private:
  7. int queue_size;
  8. std::vector<T> elements;
  9. public:
  10. void init(int size){
  11. elements.resize(size);
  12. std::fill(elements.begin(), elements.end(), -1);
  13. }
  14. bool empty() const {
  15. return elements.empty();
  16. }
  17. int size() const {
  18. return elements.size();
  19. }
  20. void push(const T& value) {
  21. pop();
  22. elements.push_back(value);
  23. }
  24. void pop() {
  25. if (!empty()) {
  26. elements.erase(elements.begin());
  27. }
  28. }
  29. T& front() {
  30. return elements.front();
  31. }
  32. int counts_one() const {
  33. int count = 0;
  34. for (const T& element : elements) {
  35. if (element == 1) {
  36. count++;
  37. }
  38. }
  39. return count;
  40. }
  41. int counts_zero() const {
  42. int count = 0;
  43. for (const T& element : elements) {
  44. if (element == 0) {
  45. count++;
  46. }
  47. }
  48. return count;
  49. }
  50. int real_size() const {
  51. int count = 0;
  52. for (const T& element : elements) {
  53. if (element != -1) {
  54. count++;
  55. }
  56. }
  57. return count;
  58. }
  59. void reset() {
  60. std::fill(elements.begin(), elements.end(), -1);
  61. }
  62. };
  63. #endif