C++ Annotations Version 10.1.0 Frank B. Brokken Center of Information Technology, University of Groningen Nettelbosje 1, P.O. Box 11044, 9700 CA Groningen The Netherlands Published at the University of Groningen ISBN 90 367 0470 7 1994 - 2014 Abstract ThisdocumentisintendedforknowledgeableusersofC(oranyotherlanguageusingaC-likegram- mar, like Perl or Java) who would like to know more about, or make the transition to, C++. This document is the main textbook for Frank’s C++ programming courses, which are yearly organized at the University of Groningen. The C++ Annotations do not cover all aspects of C++, though. In particular, C++’s basic grammar is not covered when equal to C’s grammar. Any basic book on C maybeconsultedtorefreshthatpartofC++’sgrammar. If you want a hard-copy version of the C++ Annotations: printable versions are available in postscript,pdfandotherformatsin http://sourceforge.net/projects/cppannotations/, in files having names starting with cplusplus (A4 paper size). Files having names starting with ‘cplusplusus’areintendedfortheUSlegalpapersize. TheC++Annotationsarealsoavailable asa Kindlebook. ThelatestversionoftheC++Annotationsinhtml-formatcanbebrowsedat: http://cppannotations.sourceforge.net/ and/orat http://www.icce.rug.nl/documents/ Contents 1 OverviewOfTheChapters 1 2 Introduction 3 2.1 What’snewintheC++Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 C++’shistory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.1 HistoryoftheC++Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.2 CompilingaCprogramusingaC++compiler . . . . . . . . . . . . . . . . . . . 7 2.2.3 CompilingaC++program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 C++: advantagesandclaims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4 WhatisObject-OrientedProgramming? . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.5 DifferencesbetweenCandC++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.5.1 Thefunction‘main’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5.2 End-of-linecomment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5.3 Stricttypechecking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5.4 FunctionOverloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5.5 Defaultfunctionarguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5.6 NULL-pointersvs. 0-pointersandnullptr . . . . . . . . . . . . . . . . . . . . . 16 2.5.7 The‘void’parameterlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.5.8 The‘#define__cplusplus’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.5.9 UsingstandardCfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.5.10 HeaderfilesforbothCandC++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.5.11 Defininglocalvariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.5.12 Thekeyword‘typedef’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.13 Functionsaspartofastruct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 ii 3 AFirstImpressionOfC++ 25 3.1 ExtensionstoC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.1 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.2 Thescoperesolutionoperator:: . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.3 Usingthekeyword‘const’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.4 ‘cout’,‘cin’,and‘cerr’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2 Functionsaspartofstructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2.1 Datahiding: public,privateandclass . . . . . . . . . . . . . . . . . . . . . . . . 32 3.2.2 StructsinCvs. structsinC++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.3 MoreextensionstoC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.3.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.3.2 RvalueReferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.3.3 Stronglytypedenumerations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.3.4 Initializerlists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.3.5 Typeinferenceusing‘auto’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.3.6 Definingtypesand’using’declarations . . . . . . . . . . . . . . . . . . . . . . . 45 3.3.7 Range-basedfor-loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.3.8 RawStringLiterals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.3.9 Binaryconstants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.4 Newlanguage-defineddatatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.4.1 Thedatatype‘bool’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.4.2 Thedatatype‘wchar_t’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.4.3 Unicodeencoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.4.4 Thedatatype‘longlongint’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.4.5 Thedatatype‘size_t’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.5 Anewsyntaxforcasts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.5.1 The‘static_cast’-operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.5.2 The‘const_cast’-operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.5.3 The‘reinterpret_cast’-operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.5.4 The‘dynamic_cast’-operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.5.5 Casting’shared_ptr’objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.6 KeywordsandreservednamesinC++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 iii 4 NameSpaces 57 4.1 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.1.1 Definingnamespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.1.2 Referringtoentities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.1.3 Thestandardnamespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.1.4 Nestingnamespacesandnamespacealiasing . . . . . . . . . . . . . . . . . . . 64 5 The‘string’DataType 69 5.1 Operationsonstrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.2 Astd::stringreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.2.1 Initializers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.2.2 Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.2.3 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.2.4 Memberfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.2.5 Conversionfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6 TheIO-streamLibrary 85 6.1 Specialheaderfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.2 Thefoundation: theclass‘ios_base’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6.3 Interfacing‘streambuf’objects: theclass‘ios’ . . . . . . . . . . . . . . . . . . . . . . . . 89 6.3.1 Conditionstates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.3.2 Formattingoutputandinput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.4 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.4.1 Basicoutput: theclass‘ostream’ . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.4.2 Outputtofiles: theclass‘ofstream’ . . . . . . . . . . . . . . . . . . . . . . . . . 103 6.4.3 Outputtomemory: theclass‘ostringstream’ . . . . . . . . . . . . . . . . . . . . 105 6.5 Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 6.5.1 Basicinput: theclass‘istream’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6.5.2 Inputfromfiles: theclass‘ifstream’ . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.5.3 Inputfrommemory: theclass‘istringstream’ . . . . . . . . . . . . . . . . . . . 111 6.5.4 Copyingstreams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.5.5 Couplingstreams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 6.6 Advancedtopics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 iv 6.6.1 Redirectingstreams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.6.2 ReadingANDWritingstreams. . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 7 Classes 123 7.1 Theconstructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 7.1.1 Afirstapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.1.2 Constructors: withandwithoutarguments . . . . . . . . . . . . . . . . . . . . 129 7.2 Ambiguityresolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 7.2.1 Types‘Data’vs. ‘Data()’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.2.2 Superfluousparentheses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 7.2.3 Existingtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.3 Objectsinsideobjects: composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 7.3.1 Compositionandconstobjects: constmemberinitializers . . . . . . . . . . . . 136 7.3.2 Compositionandreferenceobjects: referencememberinitializers . . . . . . . 137 7.4 Datamemberinitializers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.1 Delegatingconstructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.5 Uniforminitialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 7.6 Defaultedanddeletedclassmembers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 7.7 Constmemberfunctionsandconstobjects . . . . . . . . . . . . . . . . . . . . . . . . . . 145 7.7.1 Anonymousobjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 7.8 Memberfunctionreferencebindings(&and&&) . . . . . . . . . . . . . . . . . . . . . . 150 7.9 Thekeyword‘inline’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 7.9.1 Definingmembersinline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.9.2 Whentouseinlinefunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 7.10 Localclasses: classesinsidefunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 7.11 Thekeyword‘mutable’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.12 Headerfileorganization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.12.1 Usingnamespacesinheaderfiles . . . . . . . . . . . . . . . . . . . . . . . . . . 160 7.13 Sizeofappliedtoclassdatamembers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 8 StaticDataAndFunctions 163 8.1 Staticdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 8.1.1 Privatestaticdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 v 8.1.2 Publicstaticdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 8.1.3 Initializingstaticconstdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 8.1.4 Generalizedconstantexpressions(constexpr) . . . . . . . . . . . . . . . . . . . 166 8.2 Staticmemberfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 8.2.1 Callingconventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 9 ClassesAndMemoryAllocation 175 9.1 Operators‘new’and‘delete’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 9.1.1 Allocatingarrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 9.1.2 Deletingarrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 9.1.3 Enlargingarrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 9.1.4 Managing‘raw’memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 9.1.5 The‘placementnew’operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 9.2 Thedestructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 9.2.1 Objectpointersrevisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 9.2.2 Thefunctionset_new_handler() . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 9.3 Theassignmentoperator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 9.3.1 Overloadingtheassignmentoperator . . . . . . . . . . . . . . . . . . . . . . . . 190 9.4 The‘this’pointer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 9.4.1 Sequentialassignmentsandthis . . . . . . . . . . . . . . . . . . . . . . . . . . 194 9.5 Thecopyconstructor: initializationvs. assignment . . . . . . . . . . . . . . . . . . . . 195 9.6 Revisingtheassignmentoperator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 9.6.1 Swapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 9.7 Movingdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 9.7.1 Themoveconstructor(dynamicdata) . . . . . . . . . . . . . . . . . . . . . . . . 204 9.7.2 Themoveconstructor(composition) . . . . . . . . . . . . . . . . . . . . . . . . . 206 9.7.3 Move-assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 9.7.4 Revisingtheassignmentoperator(partII) . . . . . . . . . . . . . . . . . . . . . 208 9.7.5 Movingandthedestructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 9.7.6 Move-onlyclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 9.7.7 Defaultmoveconstructorsandassignmentoperators . . . . . . . . . . . . . . 210 9.7.8 Moving: implicationsforclassdesign . . . . . . . . . . . . . . . . . . . . . . . . 212 vi 9.8 CopyElisionandReturnValueOptimization . . . . . . . . . . . . . . . . . . . . . . . . 212 9.9 PlainOldData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 9.10 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 10 Exceptions 217 10.1 Exceptionsyntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.2 Anexampleusingexceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.2.1 Anachronisms: ‘setjmp’and‘longjmp’ . . . . . . . . . . . . . . . . . . . . . . . . 220 10.2.2 Exceptions: thepreferredalternative . . . . . . . . . . . . . . . . . . . . . . . . 222 10.3 Throwingexceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 10.3.1 Theempty‘throw’statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 10.4 Thetryblock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 10.5 Catchingexceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 10.5.1 Thedefaultcatcher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 10.6 Declaringexceptionthrowers(deprecated) . . . . . . . . . . . . . . . . . . . . . . . . . 232 10.7 Iostreamsandexceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 10.8 StandardExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 10.9 Systemerror,errorcodeanderrorcategory . . . . . . . . . . . . . . . . . . . . . . . . . 237 10.9.1 Theclass‘std::error_code’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 10.9.2 Theclass‘std::error_category’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 10.10Exceptionguarantees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 10.10.1 Thebasicguarantee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 10.10.2 Thestrongguarantee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 10.10.3 Thenothrowguarantee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 10.11Functiontryblocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 10.12Exceptionsinconstructorsanddestructors . . . . . . . . . . . . . . . . . . . . . . . . . 249 11 MoreOperatorOverloading 257 11.1 Overloading‘operator[]()’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 11.2 Overloadingtheinsertionandextractionoperators . . . . . . . . . . . . . . . . . . . . 260 11.3 Conversionoperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 11.4 Thekeyword‘explicit’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 11.4.1 Explicitconversionoperators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 vii 11.5 Overloadingtheincrementanddecrementoperators . . . . . . . . . . . . . . . . . . . 267 11.6 Overloadingbinaryoperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 11.7 Overloading‘operatornew(size_t)’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 11.8 Overloading‘operatordelete(void*)’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 11.9 Operators‘new[]’and‘delete[]’. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 11.9.1 Overloading‘new[]’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 11.9.2 Overloading‘delete[]’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 11.9.3 ‘new[]’,‘delete[]’andexceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 11.10FunctionObjects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 11.10.1 Constructingmanipulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 11.11Thecaseof[io]fstream::open() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 11.12User-definedliterals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 11.13Overloadableoperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 12 AbstractContainers 293 12.1 Notationsusedinthischapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 12.2 The‘pair’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 12.3 Allocators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 12.4 AvailableContainers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 12.4.1 The‘array’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 12.4.2 The‘vector’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 12.4.3 The‘list’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 12.4.4 The‘queue’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 12.4.5 The‘priority_queue’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 12.4.6 The‘deque’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 12.4.7 The‘map’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 12.4.8 The‘multimap’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 12.4.9 The‘set’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 12.4.10 The‘multiset’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 12.4.11 The‘stack’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 12.4.12 The‘unordered_map’container(‘hashtable’) . . . . . . . . . . . . . . . . . . . 335 12.4.13 The‘unordered_set’container . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 viii
Description: