#include #include "scolor.hpp" using namespace std; struct Node { string data; Node *next; }; class QueueIterator { Node *curr; public: QueueIterator(Node *s) : curr(s) {} QueueIterator operator++(){ curr = curr->next; return *this; } bool operator!=(const QueueIterator& other){ return curr != other.curr; } string& operator*(){ return (curr->data); } }; class Queue { Node *start = 0; Node *end_node = 0; public: QueueIterator begin(){ return QueueIterator(start); } QueueIterator end(){ return QueueIterator(0); // Maybe come back here } void enqueue(string new_word){ Node *nnode = new Node; nnode->data = new_word; nnode->next = 0; if(end_node){ end_node->next = nnode; end_node = end_node->next; } else { end_node = nnode; start = nnode; } } string dequeue(){ if(start){ if(end_node == start) end_node = 0; Node *backup = start; string retval = backup->data; start = start->next; delete backup; return retval; } return ""; } bool empty(){ return start == 0; } ~Queue(){ Node* current = start; while(current){ Node *backup = current->next; delete current; current = backup; } } }; int main(){ Queue more_tasks; more_tasks.enqueue("Clean birdcage"); more_tasks.enqueue("Change oil"); more_tasks.enqueue("Chase goat out of wherever it shouldn't be"); more_tasks.enqueue("Go skiing"); for(auto &i : more_tasks) { cout << "i = " << i << endl; i += " at midnight during a rainstorm"; } cout << "Dequeue: \n"; while(!more_tasks.empty()) cout << "Next task: " << more_tasks.dequeue() << endl; return 0; }