1: //list_b.cpp 3: #include <iostream> 4: #include <list> 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 any typedef defined " 12: "by a list 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 list."; 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: list<TrialType> lst(a, a+5); 30: cout << "\nSize of lst = " << lst.size(); 31: cout << "\nContents of lst: "; 32: list<TrialType>::iterator p = lst.begin(); 33: while (p != lst.end()) cout << *p++ << " "; 34: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 36: list<TrialType>::size_type i; 37: i = lst.max_size(); //Typical assignment to i 38: const char* dataType1 = typeid(i).name(); 39: cout << "\nlist<TrialType>::size_type\nis equivalent " 40: "to the following type: " << dataType1 41: << "\n\nIf i is of type list<TrialType>::size_type " 42: "and\ni = lst.max_size();\nthen the value of i is " 43: << static_cast<unsigned int>(i) << ", for the given lst.\n"; 44: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 47: const char* dataType2 = 48: typeid(list<TrialType>::difference_type).name(); 49: cout << "\nlist<TrialType>::difference_type\nis equivalent " 50: "to the following type: " << dataType2 << endl; 51: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 54: const char* dataType3 = typeid(list<TrialType>::reference).name(); 55: cout << "\nlist<TrialType>::reference\nis equivalent " 56: "to the following type: " << dataType3 << endl; 57: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 59: const char* dataType4 = 60: typeid(list<TrialType>::const_reference).name(); 61: cout << "\nlist<TrialType>::const_reference\nis equivalent " 62: "to the following type: " << dataType4 << endl; 63: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 66: list<TrialType>::iterator itr; 67: itr = lst.begin(); ++itr; ++itr; 68: const char* dataType5 = typeid(itr).name(); 69: cout << "\nlist<TrialType>::iterator\nis equivalent to the " 70: "following type:\n\n" << dataType5 71: << "\nIf itr is of type list<TrialType>::iterator " 72: "and itr points at the 3rd value,\nthen the value pointed to " 73: "by itr is " << *itr << ", for the given lst.\n"; 74: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 76: list<TrialType>::const_iterator itr_c; 77: itr_c = lst.begin(); ++itr_c; 78: const char* dataType6 = typeid(itr_c).name(); 79: cout << "\nlist<TrialType>::const_iterator\nis equivalent " 80: "to the following type:\n" << dataType6 81: << "\nIf itr_c is of type list<TrialType>::const_iterator " 82: "and itr_c points at\nthe second value, then the value " 83: "pointed to by itr_c is " << *itr_c << ", for the given lst.\n"; 84: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 87: const char* dataType7 = 88: typeid(list<TrialType>::reverse_iterator).name(); 89: cout << "\nlist<TrialType>::reverse_iterator\nis equivalent " 90: "to the following type:\n" << dataType7 << endl; 91: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 93: const char* dataType8 = 94: typeid(list<TrialType>::const_reverse_iterator).name(); 95: cout << "\nlist<TrialType>::const_reverse_iterator\nis equivalent " 96: "to the following type:\n" << dataType8 << endl; 97: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 100: const char* dataType9 = typeid(list<TrialType>::pointer).name(); 101: cout << "\nlist<TrialType>::pointer\nis equivalent " 102: "to the following type: " << dataType9 << endl; 103: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 105: const char* dataType10 = 106: typeid(list<TrialType>::const_pointer).name(); 107: cout << "\nlist<TrialType>::const_pointer\nis equivalent " 108: "to the following type: " << dataType10 << endl; 109: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 112: const char* dataType11 = typeid(list<TrialType>::value_type).name(); 113: cout << "\nlist<TrialType>::value_type\nis equivalent to the " 114: "following type: " << dataType11 << endl; 115: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 118: const char* dataType12 = 119: typeid(list<TrialType>::allocator_type).name(); 120: cout << "\nlist<TrialType>::allocator_type\nis equivalent " 121: "to the following type: " << dataType12 << endl; 122: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 123: }