// Oldham, Jeffrey D. // 2000Mar25 // CS1321 // // Modified by: // Massingill, Berna L. // 2001Apr // Test the Deque Implementation #include #include // has EXIT_SUCCESS #include #include #include "deque.h" using namespace std; int main(void) { deque dq; string prompt = "Please enter an operation to perform:\n" " ?: this prompt again\n" " q: quit\n" " f: return front char\n" " F: replace front char\n" " Pf: push_front\n" " pf: pop_front\n" " b: return back char\n" " B: replace back char\n" " Pb: push_back\n" " pb: pop_back\n" " r: read -th element\n" " R: replace -th element\n"; string reply; cout << prompt; while (getline(cin, reply)) { if (reply.size() > 0) { char c = reply[0]; if (c == '?') cout << prompt; else if (c == 'q' || c == 'Q') return EXIT_SUCCESS; else if (c == 'P' && reply.size() >= 3) { // push if (reply[1] == 'f') dq.push_front(reply[2]); else if (reply[1] == 'b') dq.push_back(reply[2]); else cerr << "Invalid command\n"; } else if (c == 'p' && reply.size() >= 2) { // pop if (dq.empty()) cerr << "Error: empty deque\n"; else if (reply[1] == 'f') dq.pop_front(); else if (reply[1] == 'b') dq.pop_back(); else cerr << "Invalid command\n"; } else if (c == 'f') { // front (read) if (dq.empty()) cerr << "Error: empty deque\n"; else cout << "The front is " << dq.front() << endl; } else if (c == 'b') { // back (read) if (dq.empty()) cerr << "Error: empty deque\n"; else cout << "The back is " << dq.back() << endl; } else if (c == 'F' && reply.size() >= 2) { // front (change) if (dq.empty()) cerr << "Error: empty deque\n"; else dq.front() = reply[1]; } else if (c == 'B' && reply.size() >= 2) { // back (change) if (dq.empty()) cerr << "Error: empty deque\n"; else dq.back() = reply[1]; } else if (c == 'r' && reply.size() >= 2) { // i-th elem. (read) deque::size_type i = atoi(reply.substr(1).c_str()); if (i >= dq.size()) cerr << "Error: index out of bounds\n"; else cout << "The " << i << "-th element = " << dq[i] << endl; } else if (c == 'R' && reply.size() >= 3) { // i-th elem. (change) deque::size_type i = atoi(reply.substr(2).c_str()); if (i >= dq.size()) cerr << "Error: index out of bounds\n"; else dq[i] = reply[1]; } else cerr << "Invalid command\n"; } if (dq.empty()) cout << "Empty deque (" << dq.size() << ") elements: " << dq << endl; else cout << "Deque (" << dq.size() << ") elements: " << dq << endl; } return EXIT_SUCCESS; }