Question: Please fix the deque.template file so that the test program runs correctly. My program: deque.template: //File: deque.template //This program is a dynamic implementation of a

Please fix the deque.template file so that the test program runs correctly.

My program:

deque.template:

//File: deque.template //This program is a dynamic implementation of a deque

#include #include #include "deque.h"

using namespace std;

//postcondition: empty deque has been created template deque:: deque() { count = 0; first = 0; last = 0; } //precondition: deque is not empty //postcondition: reference to element at front of deque //has been returned template T& deque:: front() { assert(!empty());

return data[first]; } //precondition: deque is not empty //postcondition: copy of element at front of deque //has been returned template T deque:: front() const { assert(!empty());

return data[first]; } //precondition: deque is not empty //postcondition: returns reference to element at front of deque template T& deque:: back() { assert(!empty());

return data[last]; } //precondition: deque is not empty //postcondition: returns copy of element at back of deque template T deque:: back() const { assert(!empty());

return data[last]; } // precondition: deque is not full //postcondition: entry has been inserted at the front of the deque template void deque:: push_front (const T& entry) { assert(!full());

if(empty()) { data[0] = entry; first = 0; last = 0; } else if(first == 0) { first = 9; data[first] = entry; } else { first--; data[first] = entry; }

count++; } //postcondition: entry has been inserted at the back of the deque template void deque:: push_back (const T& entry) { assert(!full());

if(empty()) { data[0] = entry; first = 0; last = 0; } else if(last == 9) { last = 0; data[last] = entry; } else { last++; data[last] = entry; }

count++; } //precondition: deque is not empty //postcondition: element at front of deque has been removed template void deque:: pop_front() { assert(!empty());

data[first] = 0; first++; count--;

if(first > 9) { first = 0; } } //precondition: deque is not empty //postcondition: element at back of deque has been removed template void deque:: pop_back() { assert(!empty());

data[last] = 0; last--; count--;

if(last < 0) { last = 9; } } //postcondition: number of elements in deque has been returned template size_t deque:: size() const { return count; } //postcondition: returns whether deque is empty template bool deque:: empty() const { if(count == 0) { return true; } else { return false; } } //postcondition: returns whether deque is full has been returned template bool deque::full() const { if(count == CAPACITY) { return true; } else { return false; } } //postcondition: returns whether 2 deques are equal - equal is defined //as the deques have the same number of elements & //corresponding elements are equal template bool operator == (const deque& dq1, const deque& dq2) { if(dq1.size() == dq2.size()) { size_t loops = 0;

while( loops < dq1.size()) { size_t i = dq1.first; size_t j = dq2.first;

if( i > 9) { i = 0; }

if( j > 9) { j = 0; }

if(dq1.data[i] != dq2.data[j]) { return false; }

i++; j++; loops++;

}

return true; }

else { return false; } } //postcondition: dq has been display from front to rear on out template std::ostream& operator<< (std::ostream& out, const deque& dq) { for(size_t i = dq.first; i != (dq.last + 1); i++) { if( i > 9) { i = 0; }

out << dq.data[i] << " "; }

return out; } //postcondition: returns next index in array template size_t deque::next_index (size_t i) const { if (i == 9) { i = 0; return i; } else { i++; return i; } } //postcondition: returns previous index in array template size_t deque::prev_index (size_t i) const { if (i == 0) { i = 9; return i; } else { i--; return i; } }

deque.h:

#ifndef _DEQUE_H_ #define _DEQUE_H_

#include #include

template class deque { public: static const size_t CAPACITY = 10; deque(); //postcondition: empty deque has been created T& front(); //precondition: deque is not empty // returned: reference to element at front of deque T front() const; // precondition: deque is not empty // returned: copy of element at front of deque T& back(); // precondition: deque is not empty // returned: reference to element at back of deque T back() const; // precondition: deque is not empty // returned: copy of element at back of deque void push_front (const T& entry); // precondition: deque is not full // postcondition: entry has been inserted at the front // of the deque void push_back (const T& entry); // precondition: deque is not full // postcondition: entry has been inserted at the back // of the deque void pop_front(); // precondition: deque is not empty // postcondition: element at front of deque has been removed void pop_back(); // precondition: deque is not empty // postcondition: element at back of deque has been removed size_t size() const; // postcondition: number of elements in deque has been returned bool empty() const; // returned: whether deque is empty bool full() const; // returned: whether deque is full has been returned template friend bool operator == (const deque& dq1, const deque& dq2); // returned: whether 2 deques are equal - equal is defined // as the deques have the same number of elements & // corresponding elements are equal template friend std::ostream& operator<< (std::ostream& out, const deque& dq); // postcondition: dq has been display from front to rear on out private: T data[CAPACITY]; // Circular array size_t first; // Index of item at front of the queue size_t last; // Index of item at rear of the queue size_t count; // Total number of items in the queue size_t next_index(size_t i) const; // returned: next index in array size_t prev_index (size_t i) const; // returned: previous index in array };

#include "deque.template"

#endif

test_deque.cpp:

#include #include "deque.h"

using namespace std;

int main(int argc, char **argv) { deque dq; cout << dq << endl; for (int i = 0; i < 10; i++) dq.push_front (i); cout << dq << endl; dq.pop_back(); cout << dq << endl; dq.push_front (24); cout << dq << endl; return 0; }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!