1: //deque_b.cpp 3: #include <iostream> 4: #include <deque> 5: #include <string> 6: using namespace std; 8: int main() 9: { 10: cout << "\nThis program illustrates how to display the name of " 11: "the underlying type\nrepresented by each typedef defined " 12: "by a deque class. To get a good\nfeel for what this " 13: "program shows you, you should change the meaning of" 14: "\nTrialType a couple of times, re-building and re-running " 15: "after each change.\nYou will also need to change the call " 16: "to the random generator that produces\nthe component values " 17: "of the deque."; 18: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 20: //Experiment by changing the definition of TrialType. 21: //typedef int TrialType; 22: //typedef double TrialType; 23: typedef char TrialType; 24: TrialType a[] = {(TrialType)65, 25: (TrialType)67, 26: (TrialType)69, 27: (TrialType)71, 28: (TrialType)73}; 29: deque<TrialType> q(a, a+5); 30: cout << "\nSize of q = " << q.size(); 31: cout << "\nContents of q: "; 32: for(deque<int>::size_type i=0; i<q.size(); i++) 33: cout << q.at(i) << " "; 34: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 36: deque<TrialType>::size_type i; 37: i = q.max_size(); //Typical assignment to i 38: const char* dataType1 = typeid(i).name(); 39: cout << "\ndeque<TrialType>::size_type\nis equivalent " 40: "to the following type:\n\n" << dataType1 41: << "\n\nIf i is of type deque<TrialType>::size_type " 42: "and\ni = q.max_size();\nthen the value of i is " 43: << static_cast<unsigned int>(i) << ", for the given q.\n"; 44: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 47: deque<TrialType>::difference_type d; 48: d = q.end()-q.begin(); //Typical assignment to d 49: const char* dataType2 = typeid(d).name(); 50: cout << "\ndeque<TrialType>::difference_type\nis equivalent " 51: "to the following type:\n\n" << dataType2 52: << "\n\nIf d is of type deque<TrialType>::differencee_type " 53: "and\nd = q.end()-q.begin();\nthen the value of d is " 54: << static_cast<int>(d) << ", for the given q.\n"; 55: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 58: deque<TrialType>::reference r = q[3]; 59: //Typical initialization of r 60: //Note that references must be initialized, not assigned to. 61: const char* dataType3 = typeid(r).name(); 62: cout << "\ndeque<TrialType>::reference\nis equivalent " 63: "to the following type:\n\n" << dataType3 64: << "\n\nIf r is of type deque<TrialType>::reference and\n" 65: "r = q[3];\nthen the value of r is " 66: << r << ", for the given q.\n"; 67: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 69: deque<TrialType>::const_reference r_c = q[3]; 70: const char* dataType4 = typeid(r_c).name(); 71: cout << "\ndeque<TrialType>::const_reference\nis equivalent " 72: "to the following type:\n\n" << dataType4 73: << "\n\nIf r_c is of type deque<TrialType>::const_reference " 74: "and\nr_c = q[3];\nthen the value of r is " 75: << r << ", for the given q.\n"; 76: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 80: deque<TrialType>::iterator itr; 81: itr = q.begin()+2; //Typical assignment to itr 82: const char* dataType5 = typeid(itr).name(); 83: cout << "\ndeque<TrialType>::iterator\nis equivalent to the " 84: "following type:\n\n" << dataType5 85: << "\n\nIf itr is of type deque<TrialType>::iterator " 86: "and\nitr = begin()+2;\nthen the value pointed to by itr is " 87: << *itr << ", for the given q.\n"; 88: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 90: deque<TrialType>::const_iterator itr_c; 91: itr_c = q.begin()+1; //Typical assignment to itr_c 92: const char* dataType6 = typeid(itr_c).name(); 93: cout << "\ndeque<TrialType>::const_iterator\nis equivalent " 94: "to the following type:\n\n" << dataType6 95: << "\n\nIf itr_c is of type deque<TrialType>::const_iterator " 96: "and\nitr_c = begin()+1;\nthen the value pointed to by itr_c is " 97: << *itr_c << ", for the given q.\n"; 98: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 102: deque<TrialType>::reverse_iterator itr_r; 103: itr_r = q.rbegin()+1; //Typical assignment to itr_r 104: const char* dataType7 = typeid(itr_r).name(); 105: cout << "\ndeque<TrialType>::reverse_iterator\nis equivalent " 106: "to the following type:\n\n" << dataType7 107: << "\n\nIf itr_r is of type deque<TrialType>::reverse_iterator " 108: "and\nitr_r = rbegin()+1;\nthen the value pointed to by itr_r is " 109: << *itr_r << ", for the given q.\n"; 110: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 112: deque<TrialType>::const_reverse_iterator itr_cr; 113: itr_cr = q.rend()-2; //Typical assignment to itr_cr 114: const char* dataType8 = typeid(itr_cr).name(); 115: cout << "\ndeque<TrialType>::const_reverse_iterator\nis equivalent " 116: "to the following type:\n\n" << dataType8 117: << "\n\nIf itr_cr is of type " 118: "deque<TrialType>::const_reverse_iterator and" 119: "\nitr_cr = rend()-2;\nthen the value pointed to by itr_cr is " 120: << *itr_cr << ", for the given q.\n"; 121: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 125: deque<TrialType>::pointer ptr; 126: ptr = &q[3]; //A typical assignment to ptr 127: const char* dataType9 = typeid(ptr).name(); 128: cout << "\ndeque<TrialType>::pointer\nis equivalent " 129: "to the following type:\n\n" << dataType9 130: << "\n\nIf ptr is of type deque<TrialType>::pointer and\n" 131: "ptr = &q[3];\nthen the value pointed to by ptr is " 132: << *ptr << ", for the given q.\n"; 133: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 135: deque<TrialType>::const_pointer ptr_c; 136: ptr_c = &q[1]; //Typical assignment to ptr_c 137: const char* dataType10 = typeid(ptr_c).name(); 138: cout << "\ndeque<TrialType>::const_pointer\nis equivalent " 139: "to the following type:\n\n" << dataType10 140: << "\n\nIf ptr_c is of type deque<TrialType>::const_pointer " 141: "and\nptr_c = &q[1];\nthen the value pointed to by ptr_c is " 142: << *ptr_c << ", for the given q.\n"; 143: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 146: const char* dataType11 = typeid(deque<TrialType>::value_type).name(); 147: cout << "\ndeque<TrialType>::value_type\nis equivalent to the " 148: "following type:\n\n" << dataType11 << endl << endl; 149: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 152: const char* dataType12 = 153: typeid(deque<TrialType>::allocator_type).name(); 154: cout << "\ndeque<TrialType>::allocator_type\nis equivalent " 155: "to the following type:\n\n" << dataType11 << endl << endl; 156: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 157: }