12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include <vector>
- #ifndef ASJ_QUEUE
- #define ASJ_QUEUE
- template<typename T>
- class Queue {
- private:
- int queue_size;
- std::vector<T> elements;
- public:
- void init(int size){
- elements.resize(size);
- std::fill(elements.begin(), elements.end(), -1);
- }
- bool empty() const {
- return elements.empty();
- }
- int size() const {
- return elements.size();
- }
- void push(const T& value) {
- pop();
- elements.push_back(value);
- }
- void pop() {
- if (!empty()) {
- elements.erase(elements.begin());
- }
- }
- T& front() {
- return elements.front();
- }
- int counts_one() const {
- int count = 0;
- for (const T& element : elements) {
- if (element == 1) {
- count++;
- }
- }
- return count;
- }
- int counts_zero() const {
- int count = 0;
- for (const T& element : elements) {
- if (element == 0) {
- count++;
- }
- }
- return count;
- }
- int real_size() const {
- int count = 0;
- for (const T& element : elements) {
- if (element != -1) {
- count++;
- }
- }
- return count;
- }
- void reset() {
- std::fill(elements.begin(), elements.end(), -1);
- }
- };
- #endif
|