1: //vector_b.cpp
3: #include <iostream>
4: #include <vector>
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 vector 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 vector.";
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: vector<TrialType> v(a, a+5);
30: cout << "\nSize of v = " << v.size()
31: << " Capacity of v = " << v.capacity();
32: cout << "\nContents of v: ";
33: for(vector<int>::size_type i=0; i<v.size(); i++)
34: cout << v.at(i) << " ";
35: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
37: vector<TrialType>::size_type i;
38: i = v.max_size(); //Typical assignment to i
39: const char* dataType1 = typeid(i).name();
40: cout << "\nvector<TrialType>::size_type\nis equivalent "
41: "to the following type:\n\n" << dataType1
42: << "\n\nIf i is of type vector<TrialType>::size_type "
43: "and\ni = v.max_size();\nthen the value of i is "
44: << static_cast<unsigned int>(i) << ", for the given v.\n";
45: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
48: vector<TrialType>::difference_type d;
49: d = v.end()-v.begin(); //Typical assignment to d
50: const char* dataType2 = typeid(d).name();
51: cout << "\nvector<TrialType>::difference_type\nis equivalent "
52: "to the following type:\n\n" << dataType2
53: << "\n\nIf d is of type vector<TrialType>::differencee_type "
54: "and\nd = v.end()-v.begin();\nthen the value of d is "
55: << static_cast<int>(d) << ", for the given v.\n";
56: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
59: vector<TrialType>::reference r = v[3];
60: //Typical initialization of r
61: //Note that references must be initialized, not assigned to.
62: const char* dataType3 = typeid(r).name();
63: cout << "\nvector<TrialType>::reference\nis equivalent "
64: "to the following type:\n\n" << dataType3
65: << "\n\nIf r is of type vector<TrialType>::reference and\n"
66: "r = v[3];\nthen the value of r is "
67: << r << ", for the given v.\n";
68: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
70: vector<TrialType>::const_reference r_c = v[3];
71: const char* dataType4 = typeid(r_c).name();
72: cout << "\nvector<TrialType>::const_reference\nis equivalent "
73: "to the following type:\n\n" << dataType4
74: << "\n\nIf r_c is of type vector<TrialType>::const_reference "
75: "and\nr_c = v[3];\nthen the value of r is "
76: << r << ", for the given v.\n";
77: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
81: vector<TrialType>::iterator itr;
82: itr = v.begin()+2; //Typical assignment to itr
83: const char* dataType5 = typeid(itr).name();
84: cout << "\nvector<TrialType>::iterator\nis equivalent to the "
85: "following type:\n\n" << dataType5
86: << "\n\nIf itr is of type vector<TrialType>::iterator "
87: "and\nitr = begin()+2;\nthen the value pointed to by itr is "
88: << *itr << ", for the given v.\n";
89: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
91: vector<TrialType>::const_iterator itr_c;
92: itr_c = v.begin()+1; //Typical assignment to itr_c
93: const char* dataType6 = typeid(itr_c).name();
94: cout << "\nvector<TrialType>::const_iterator\nis equivalent "
95: "to the following type:\n\n" << dataType6
96: << "\n\nIf itr_c is of type vector<TrialType>::const_iterator "
97: "and\nitr_c = begin()+1;\nthen the value pointed to by itr_c is "
98: << *itr_c << ", for the given v.\n";
99: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
103: vector<TrialType>::reverse_iterator itr_r;
104: itr_r = v.rbegin()+1; //Typical assignment to itr_r
105: const char* dataType7 = typeid(itr_r).name();
106: cout << "\nvector<TrialType>::reverse_iterator\nis equivalent "
107: "to the following type:\n\n" << dataType7
108: << "\n\nIf itr_r is of type vector<TrialType>::reverse_iterator "
109: "and\nitr_r = rbegin()+1;\nthen the value pointed to by itr_r is "
110: << *itr_r << ", for the given v.\n";
111: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
113: vector<TrialType>::const_reverse_iterator itr_cr;
114: itr_cr = v.rend()-2; //Typical assignment to itr_cr
115: const char* dataType8 = typeid(itr_cr).name();
116: cout << "\nvector<TrialType>::const_reverse_iterator\nis equivalent "
117: "to the following type:\n\n" << dataType8
118: << "\n\nIf itr_cr is of type "
119: "vector<TrialType>::const_reverse_iterator and"
120: "\nitr_cr = rend()-2;\nthen the value pointed to by itr_cr is "
121: << *itr_cr << ", for the given v.\n";
122: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
126: vector<TrialType>::pointer ptr;
127: ptr = &v[3]; //A typical assignment to ptr
128: const char* dataType9 = typeid(ptr).name();
129: cout << "\nvector<TrialType>::pointer\nis equivalent "
130: "to the following type:\n\n" << dataType9
131: << "\n\nIf ptr is of type vector<TrialType>::pointer and\n"
132: "ptr = &v[3];\nthen the value pointed to by ptr is "
133: << *ptr << ", for the given v.\n";
134: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
136: vector<TrialType>::const_pointer ptr_c;
137: ptr_c = &v[1]; //Typical assignment to ptr_c
138: const char* dataType10 = typeid(ptr_c).name();
139: cout << "\nvector<TrialType>::const_pointer\nis equivalent "
140: "to the following type:\n\n" << dataType10
141: << "\n\nIf ptr_c is of type vector<TrialType>::const_pointer "
142: "and\nptr_c = &v[1];\nthen the value pointed to by ptr_c is "
143: << *ptr_c << ", for the given v.\n";
144: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
147: const char* dataType11 = typeid(vector<TrialType>::value_type).name();
148: cout << "\nvector<TrialType>::value_type\nis equivalent to the "
149: "following type:\n\n" << dataType11 << endl << endl;
150: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
153: const char* dataType12 =
154: typeid(vector<TrialType>::allocator_type).name();
155: cout << "\nvector<TrialType>::allocator_type\nis equivalent "
156: "to the following type:\n\n" << dataType11 << endl << endl;
157: cout << "Press Enter to continue ... "; cin.ignore(80, '\n');
158: }