diff --git a/queue/main.cpp b/queue/main.cpp index a9b8df3..07e4480 100644 --- a/queue/main.cpp +++ b/queue/main.cpp @@ -4,20 +4,27 @@ int main(void){ ios_base::sync_with_stdio(false); cin.tie(NULL); Queue* q = new Queue(); - cout << "newest:" << q->frontEle() << endl; - cout << "oldest:" << q->backEle() << endl; - cout << "size: " << q->returnSize() << endl; - q->popEle(); - q->PushEle(1); - q->PushEle(2); - q->PushEle(3); - cout << "newest:" << q->frontEle() << endl; - cout << "oldest:" << q->backEle() << endl; - cout << "size: " << q->returnSize() << endl; - q->printQueue(); - q->popEle(); - q->printQueue(); - cout << "newest:" << q->frontEle() << endl; - cout << "oldest:" << q->backEle() << endl; - cout << "size: " << q->returnSize() << endl; + try + { + cout << "newest:" << q->frontEle() << endl; + cout << "oldest:" << q->backEle() << endl; + cout << "size: " << q->returnSize() << endl; + q->popEle(); + q->PushEle(1); + q->PushEle(2); + q->PushEle(3); + cout << "newest:" << q->frontEle() << endl; + cout << "oldest:" << q->backEle() << endl; + cout << "size: " << q->returnSize() << endl; + q->printQueue(); + q->popEle(); + q->printQueue(); + cout << "newest:" << q->frontEle() << endl; + cout << "oldest:" << q->backEle() << endl; + cout << "size: " << q->returnSize() << endl; + } + catch(const std::exception& e) + { + std::cerr << e.what() << '\n'; + } } diff --git a/queue/queue.cpp b/queue/queue.cpp index 57ed003..0ea4ed2 100644 --- a/queue/queue.cpp +++ b/queue/queue.cpp @@ -77,25 +77,13 @@ void Queue::popEle(void){ template T Queue::frontEle(void){ - try{ - if(size <= 0) throw "Queue is empty"; - } - catch (const char* str){ - cout << str << endl; - return EXIT_FAILURE; - } + if(size <= 0) throw QueueEmptyException(); return last->data; } template T Queue::backEle(void){ - try{ - if(size <= 0) throw "Queue is empty"; - } - catch (const char* str){ - cout << str << endl; - return EXIT_FAILURE; - } + if(size <= 0) throw QueueEmptyException(); return this->next->data; } @@ -109,3 +97,15 @@ void Queue::printQueue(void){ cout << endl; return; } + + + +QueueEmptyException::QueueEmptyException() +: message("Queue is Empty"){} + +QueueEmptyException::QueueEmptyException(string _m) +: message("" + _m){} + +const char * QueueEmptyException::what() const throw(){ + return message.c_str(); +} diff --git a/queue/queue.h b/queue/queue.h index 1a1c644..795a336 100644 --- a/queue/queue.h +++ b/queue/queue.h @@ -17,3 +17,13 @@ class Queue{ static Queue* last; static int size; }; + +class QueueEmptyException:public exception +{ +private: + string message; +public: + QueueEmptyException(); + QueueEmptyException(string); + virtual const char* what() const throw(); +}; \ No newline at end of file