Preface Preface to First Edition
Contents
Introductory Material: ... pg 1
1 Notes to the Reader
1.1 The Structure of This Book2 A Tour of C++
1.1.1 Examples and References1.2 Learning C++
1.1.2 Exercises
1.1.3 Implementation Note
1.3 The Design of C++
1.3.1 Efficiency and Structure1.4 Historical Note
1.3.2 Philosophical Note
1.5 Use of C++
1.6 C and C++
1.6.1 Suggestions for C Programmers1.7 Thinking about Programming in C++
1.6.2 Suggestions for C++ Programmers
1.8 Advice
1.8.1 References
2.1 What is C++3 A Tour of the Standard Library
2.2 Programming Paradigms
2.3 Procedural Programming
2.3.1 Variables and Arithmetic2.4 Modular Programming
2.3.2 Tests and Loops
2.3.3 Pointers and Arrays
2.4.1 Separate Compilation2.5 Data Abstraction
2.4.2 Exception Handling
2.5.1 Modules Defining Types2.6 Object-Oriented Programming
2.5.2 User-Defined Types
2.5.3 Concrete Types
2.5.4 Abstract Types
2.5.5 Virtual Functions
2.6.1 Problems with Concrete Types2.7 Generic Programming
2.6.2 Class Hierarchies
2.7.1 Containers2.8 Postscript
2.7.2 Generic Algorithms
2.9 Advice
3.1 Introduction
3.2 Hello, world!
3.3 The Standard Library Namespace
3.4 Output
3.5 Strings
3.5.1 C-Style Strings3.6 Input
3.7 Containers
3.7.1 Vector3.8 Algorithms
3.7.2 Range Checking
3.7.3 List
3.7.4 Map
3.7.5 Standard Containers
3.8.1 Use of Iterators3.9 Math
3.8.2 Iterator Types
3.8.3 Iterators and I/O
3.8.4 Traversals and Predicates
3.8.5 Algorithms Using Member Functions
3.8.6 Standard Library Algorithms
3.9.1 Complex Numbers 3.9.2 Vector Arithmetic3.10 Standard Library Facilities
3.9.3 Basic Numeric Support
3.11 Advice
Part I: Basic Facilities ... pg 67
4 Types and Declarations
4.1 Types5 Pointers, Arrays, and Structures
4.1.1 Fundamental Types4.2 Booleans
4.3 Character Types
4.3.1 Character Literals4.4 Integer Types
4.4.1 Integer Literals4.5 Floating-Point Types
4.5.1 Floating-Point Literals4.6 Sizes
4.7 Void
4.8 Enumerations
4.9 Declarations
4.9.1 The Structure of a Declaration4.10 Advice
4.9.2 Declaring Multiple Names
4.9.3 Names
4.9.4 Scope
4.9.5 Initialization
4.9.6 Objects and Lvalues
4.9.7 Typedef
4.11 Exercises
5.1 Pointers6 Expressions and Statements
5.1.1 Zero5.2 Arrays
5.2.1 Array Initializers 5.2.2 String Literals5.3 Pointers into Arrays
5.3.1 Navigating Arrays5.4 Constants
5.4.1 Pointers and Constants5.5 References
5.6 Pointer to Void
5.7 Structures
5.7.1 Type Equivalence5.8 Advice
5.9 Exercises
6.1 A Desk Calculator7 Functions
6.1.1 The Parser6.2 Operator Summary
6.1.2 The Input Function
6.1.3 Low-level Input
6.1.4 Error Handling
6.1.5 The Driver
6.1.6 Headers
6.1.7 Command-Line Arguments
6.1.8 A Note on Style
6.2.1 Results6.3 Statement Summary
6.2.2 Evaluation Order
6.2.3 Operator Precedence
6.2.4 Bitwise Logical Operators
6.2.5 Increment and Decrement
6.2.6 Free Store
6.2.6.1 Arrays6.2.7 Explicit Type Conversion
6.2.6.2 Memory Exhaustion
6.2.8 Constructors
6.3.1 Declarations as Statements6.4 Comments and Indentation
6.3.2 Selection Statements
6.3.2.1 Declarations in Conditions6.3.3 Iteration Statements
6.3.3.1 Declarations in For-Statements6.3.4 Goto
6.5 Advice
6.6 Exercises
7.1 Function Declarations8 Namespaces and Exceptions
7.1.1 Function Definitions7.2 Argument Passing
7.1.2 Static Variables
7.2.1 Array Arguments7.3 Value Return
7.4 Overloaded Function Names
7.4.1 Overloading and Return Type7.5 Default Arguments
7.4.2 Overloading and Scopes
7.4.3 Manual Ambiguity Resolution
7.4.4 Resolution for Multiple Arguments
7.6 Unspecified Number of Arguments
7.7 Pointer to Function
7.8 Macros
7.8.1 Conditional Compilation7.9 Advice
7.10 Exercises
8.1 Modularization and Interfaces9 Source Files and Programs
8.2 Namespaces
8.2.1 Qualified Names8.3 Exceptions
8.2.2 Using Declarations
8.2.3 Using Directives
8.2.4 Multiple Interfaces
8.2.4.1 Interface Design Alternatives8.2.5 Avoiding Name Clashes
8.2.5.1 Unnamed Namespaces8.2.6 Name Lookup
8.2.7 Namespace Aliases
8.2.8 Namespace Composition
8.2.8.1 Selection8.2.9 Namespaces and Old Code
8.2.8.2 Composition and Selection
8.2.9.1 Namespaces and C
8.2.9.2 Namespaces and Overloading
8.2.9.3 Namespaces Are Open
8.3.1 Throw and Catch8.4 Advice
8.3.2 Discrimination of Exceptions
8.3.3 Exceptions in the Calculator
8.3.3.1 Alternative Error-Handling Strategies
8.5 Exercises
9.1 Separate Compilation
9.2 Linkage
9.2.1 Header Files9.3 Using Header Files
9.2.2 Standard Library Headers
9.2.3 The One-Definition Rule
9.2.4 Linkage to Non-C++ Code
9.2.5 Linkage and Pointers to Functions
9.3.1 Single Header File9.4 Programs
9.3.2 Multiple Header Files
9.3.2.1 Other Calculator Modules9.3.3 Include Guards
9.3.2.2 Use of Headers
9.4.1 Initialization of Nonlocal Variables9.5 Advice
9.4.1.1 Program Termination
9.6 Exercises
Part II: Abstraction Mechanisms ... pg 221
10 Classes
10.1 Introduction11 Operator Overloading
10.2 Classes
10.2.1 Member Functions10.3 Efficient User-Defined Types
10.2.2 Access Control
10.2.3 Constructors
10.2.4 Static Members
10.2.5 Copying Class Objects
10.2.6 Constant Member Functions
10.2.7 Self-Reference
10.2.7.1 Physical and Logical Constness10.2.8 Structures and Classes
10.2.7.2 Mutable
10.2.9 In-Class Function Definitions
10.3.1 Member Functions10.4 Objects
10.3.2 Helper Functions
10.3.3 Overloaded Operators
10.3.4 The Significance of Concrete Classes
10.4.1 Destructors10.5 Advice
10.4.2 Default Constructors
10.4.3 Construction and Destruction
10.4.4 Local Variables
10.4.4.1 Copying Objects10.4.5 Free Store
10.4.6 Class Objects as Members
10.4.6.1 Necessary Member Initialization10.4.7 Arrays
10.4.6.2 Member Constants
10.4.6.3 Copying Members
10.4.8 Local Static Store
10.4.9 Nonlocal Store
10.4.10 Temporary Objects
10.4.11 Placement of Objects
10.4.12 Unions
10.6 Exercises
11.1 Introduction12 Derived Classes
11.2 Operator Functions
11.2.1 Binary and Unary Operators11.3 A Complex Number Type
11.2.2 Predefined Meanings for Operators
11.2.3 Operators and User-Defined Types
11.2.4 Operators in Namespaces
11.3.1 Member and Nonmember Operators11.4 Conversion Operators
11.3.2 Mixed-Mode Arithmetic
11.3.3 Initialization
11.3.4 Copying
11.3.5 Constructors and Conversions
11.3.6 Literals
11.3.7 Additional Member Functions
11.3.8 Helper Functions
11.4.1 Ambiguities11.5 Friends
11.5.1 Finding Friends11.6 Large Objects
11.5.2 Friends and Members
11.7 Essential Operators
11.7.1 Explicit Constructors11.8 Subscripting
11.9 Function Call
11.10 Dereferencing
11.11 Increment and Decrement
11.12 A String Class
11.13 Advice
11.14 Exercises
12.1 Introduction13 Templates
12.2 Derived Classes
12.2.1 Member Functions12.3 Abstract Classes
12.2.2 Constructors and Destructors
12.2.3 Copying
12.2.4 Class Hierarchies
12.2.5 Type Fields
12.2.6 Virtual Functions
12.4 Design of Class Hierarchies
12.4.1 A Traditional Class Hierarchy12.5 Class Hierarchies and Abstract Classes
12.4.1.1 Critique12.4.2 Abstract Classes
12.4.3 Alternative Implementations
12.4.3.1 Critique12.4.4 Localizing Object Creation
12.6 Advice
12.7 Exercises
13.1 Introduction14 Exception Handling
13.2 A Simple String Template
13.2.1 Defining a Template13.3 Function Templates
13.2.2 Template Instantiation
13.2.3 Template Parameters
13.2.4 Type Equivalence
13.2.5 Type Checking
13.3.1 Function Template Arguments13.4 Using Template Arguments to Specify Policy
13.3.2 Function Template Overloading
13.4.1 Default Template Parameters13.5 Specialization
13.5.1 Order of Specializations13.6 Derivation and Templates
13.5.2 Template Function Specialization
13.6.1 Parameterization and Inheritance13.7 Source Code Organization
13.6.2 Member Templates
13.6.3 Inheritance Relationships
13.6.3.1 Template Conversions
13.8 Advice
13.9 Exercises
14.1 Error Handling15 Class Hierarchies
14.1.1 Alternative Views on Exceptions14.2 Grouping of Exceptions
14.2.1 Derived Exceptions14.3 Catching Exceptions
14.2.2 Composite Exceptions
14.3.1 Re-Throw14.4 Resource Management
14.3.2 Catch Every Exception
14.3.2.1 Order of Handlers
14.4.1 Using Constructors and Destructors14.5 Exceptions That Are Not Errors
14.4.2 Auto_ptr
14.4.3 Caveat
14.4.4 Exceptions and New
14.4.5 Resource Exhaustion
14.4.6 Exceptions in Constructors
14.4.6.1 Exceptions and Member Initialization14.4.7 Exceptions in Destructors
14.4.6.1 Exceptions and Copying
14.6 Exception Specifications
14.6.1 Checking Exception Specifications14.7 Uncaught Exceptions
14.6.2 Unexpected Exceptions
14.6.3 Mapping Exceptions
14.6.3.1 User Mapping of Exceptions
14.6.3.2 Recovering the Type of an Exception
14.8 Exceptions and Efficiency
14.9 Error-Handling Alternatives
14.10 Standard Exceptions
14.11 Advice
14.12 Exercises15.1 Introduction and Overview
15.2 Multiple Inheritance
15.2.1 Ambiguity Resolution15.3 Access Control
15.2.2 Inheritance and Using-Declarations
15.2.3 Replicated Base Classes
15.2.3.1 Overriding15.2.4 Virtual Base Classes
15.2.4.1 Programming Virtual Bases15.2.5 Using Multiple Inheritance
15.2.5.1 Overriding Virtual Base Functions
15.3.1 Protected Members15.4 Run-Time Type Information
15.3.1.1 Use of Protected Members15.3.2 Access to Base Classes
15.3.2.1 Multiple Inheritance and Access Control
15.3.2.2 Using-Declarations and Access Control
15.4.1 Dynamic_cast15.5 Pointers to Members
15.4.1.1 Dynamic_cast of References15.4.2 Navigating Class Hierarchies
15.4.2.1 Static and Dynamic Casts15.4.3 Class Object Construction and Destruction
15.4.4 Typeid and Extended Type Information
15.4.4.1 Extended Type Information15.4.5 Uses and Misuses of RTTI
15.5.1 Base and Derived Classes15.6 Free Store
15.6.1 Array Allocation15.7 Advice
15.6.2 ``Virtual Constructors''
15.8 Exercises
Part III: The Standard Library ... pg 427
16 Library Organization and Containers17 Standard Containers
16.1 Standard Library Design
16.1.1 Design Constraints16.2 Container Design
16.1.2 Standard Library Organization
16.1.3 Language Support
16.2.1 Specialized Containers and Iterators16.3 Vector
16.2.2 Based Containers
16.2.3 STL Containers
16.3.1 Types16.4 Advice
16.3.2 Iterators
16.3.3 Element Access
16.3.4 Constructors
16.3.5 Stack Operations
16.3.6 List Operations
16.3.7 Addressing Elements
16.3.8 Size and Capacity
16.3.9 Other Member Functions
16.3.10 Helper Functions
16.3.11 Vector
16.5 Exercises
17.1 Standard Containers18 Algorithms and Function Objects
17.1.1 Operations Summary17.2 Sequences
17.1.2 Container Summary
17.1.3 Representation
17.1.4 Element Requirements
17.1.4.1 Comparisons
17.1.4.2 Other Relational Operators
17.2.1 Vector17.3 Sequence Adapters
17.2.2 List
17.2.2.1 Splice, Sort, and Merge17.2.3 Deque
17.2.2.2 Front Operations
17.2.2.3 Other Operations
17.3.1 Stack17.4 Associative Containers
17.3.2 Queue
17.3.3 Priority Queue
17.4.1 Map17.5 Almost Containers
17.4.1.1 Types17.4.2 Multimap
17.4.1.2 Iterators and Pairs
17.4.1.3 Subscripting
17.4.1.4 Constructors
17.4.1.5 Comparisons
17.4.1.6 Map Operations
17.4.1.7 List Operations
17.4.1.8 Other Functions
17.4.3 Set
17.4.4 Multiset
17.5.1 String17.6 Defining a New Container
17.5.2 Valarray
17.5.3 Bitset
17.5.3.1 Constructors17.5.4 Built-In Arrays
17.5.3.2 Bit Manipulation Operations
17.5.3.3 Other Operations
17.6.1 Hash_map17.7 Advice
17.6.2 Representation and Construction
17.6.2.1 Lookup17.6.3 Other Hashed Associative Containers
17.6.2.2 Erase and Resize
17.6.2.3 Hashing
17.8 Exercises
18.1 Introduction19 Iterators and Allocators
18.2 Overview of Standard Library Algorithms
18.3 Sequences and Containers
18.3.1 Input Sequences18.4 Function Objects
18.4.1 Function Object Bases18.5 Nonmodifying Sequence Algorithms
18.4.2 Predicates
18.4.2.1 Overview of Predicates18.4.3 Arithmetic Function Objects
18.4.4 Binders, Adapters, and Negaters
18.4.4.1 Binders
18.4.4.2 Member Function Adapters
18.4.4.3 Pointer to Function Adapters
18.4.4.4 Negaters
18.5.1 For_each18.6 Modifying Sequence Algorithms
18.5.2 The Find Family
18.5.3 Count
18.5.4 Equal and Mismatch
18.5.5 Search
18.6.1 Copy18.7 Sorted Sequences
18.6.2 Transform
18.6.3 Unique
18.6.3.1 Sorting Criteria18.6.4 Replace
18.6.5 Remove
18.6.6 Fill and Generate
18.6.7 Reverse and Rotate
18.6.8 Swap
18.7.1 Sorting18.8 Heaps
18.7.2 Binary Search
18.7.3 Merge
18.7.4 Partitions
18.7.5 Set Operations on Sequences
18.9 Min and Max
18.10 Permutations
18.11 C-Style Algorithms
18.12 Advice
18.13 Exercises
19.1 Introduction19.5 Advice
19.2 Iterators and Sequences
19.2.1 Iterator Operations19.3 Checked Iterators
19.2.2 Iterator Traits
19.2.3 Iterator Categories
19.2.4 Inserters
19.2.5 Reverse Iterators
19.2.6 Stream Iterators
19.2.6.1 Stream Buffers
19.3.1 Exceptions, Containers, and Algorithms19.4 Allocators
19.4.1 The Standard Allocator19.4.2 A User-Defined Allocator
19.4.3 Generalized Allocators
19.4.4 Uninitialized Memory
19.4.5 Dynamic Memory
19.4.6 C-Style Allocation
20.1 Introduction21 Streams
20.2 Characters
20.2.1 Character Traits20.3 Basic_string
20.3.1 Types20.4 The C Standard Library
20.3.2 Iterators
20.3.3 Element Access
20.3.4 Constructors
20.3.5 Errors
20.3.6 Assignment
20.3.7 Conversion to C-Style Strings
20.3.8 Comparisons
20.3.9 Insert
20.3.10 Concatenation
20.3.11 Find
20.3.12 Replace
20.3.13 Substrings
20.3.14 Size and Capacity
20.3.15 I/O Operations
20.3.16 Swap
20.4.1 C-Style Strings20.5 Advice
20.4.2 Character Classification
20.6 Exercises
21.1 Introduction22 Numerics
21.2 Output
21.2.1 Output Streams21.3 Input
21.2.2 Output of Built-In Types
21.2.3 Output of User-Defined Types
21.2.3.1 Virtual Output Functions
21.3.1 Input Streams21.4 Formatting
21.3.2 Input of Built-In Types
21.3.3 Stream State
21.3.4 Input of Characters
21.3.5 Input of User-Defined Types
21.3.6 Exceptions
21.3.7 Tying of Streams
21.3.8 Sentries
21.4.1 Format State21.5 File Streams and String Streams
21.4.1.1 Copying Format State21.4.2 Integer Output
21.4.3 Floating-Point Output
21.4.4 Output Fields
21.4.5 Field Adjustment
21.4.6 Manipulators
21.4.6.1 Manipulators Taking Arguments
21.4.6.2 Standard I/O Manipulators
21.4.6.3 User-Defined Manipulators
21.5.1 File Streams21.6 Buffering
21.5.2 Closing of Streams
21.5.3 String Streams
21.6.1 Output Streams and Buffers21.7 Locale
21.6.2 Input Streams and Buffers
21.6.3 Streams and Buffers
21.6.4 Stream Buffers
21.7.1 Stream Callbacks21.8 C Input/Output
21.9 Advice
21.10 Exercises
22.1 Introduction
22.2 Numeric Limits
22.2.1 Limit Macros22.3 Standard Mathematical Functions
22.4 Vector Arithmetic
22.4.1 Valarray Construction22.5 Complex Arithmetic
22.4.2 Valarray Subscripting and Assignment
22.4.3 Member Operations
22.4.4 Nonmember Operations
22.4.5 Slices
22.4.6 Slice_array
22.4.7 Temporaries, Copying, and Loops
22.4.8 Generalized Slices
22.4.9 Masks
22.4.10 Indirect Arrays
22.6 Generalized Numeric Algorithms
22.6.1 Accumulate22.7 Random Numbers
22.6.2 Inner_product
22.6.3 Incremental Change
22.8 Advice
22.9 Exercises
Part IV: Design Using C++ ... pg 689
23 Development and Design24 Design and Programming
23.1 Overview23.5 Management
23.2 Introduction
23.3 Aims and Means
23.4 The Development Process
23.4.1 The Development Cycle23.4.2 Design Aims
23.4.3 Design Steps
23.4.3.1 Step 1: Find Classes23.4.4 Experimentation and Analysis
23.4.3.2 Step 2: Specify Operations
23.4.3.3 Step 3: Specify Dependencies
23.4.3.4 Step 4: Specify Interfaces
23.4.3.5 Reorganization of Class Hierarchies
23.4.3.6 Use of Models
23.4.5 Testing
23.4.6 Software Maintenance
23.4.7 Efficiency
23.5.1 Reuse23.6 Annotated Bibliography
23.5.2 Scale
23.5.3 Individuals
23.5.4 Hybrid Design
23.7 Advice
24.1 Overview25 Roles of Classes
24.2 Design and Programming Language
24.2.1 Ignoring Classes24.3 Classes
24.2.2 Avoiding Inheritance
24.2.3 Ignoring Static Type Checking
24.2.4 Avoiding Programming
24.2.5 Using Class Hierarchies Exclusively
24.3.1 What Do Classes Represent?24.4 Components
24.3.2 Class Hierarchies
24.3.2.1 Dependencies within a Class Hierarchy24.3.3 Containment Relationships
24.3.4 Containment and Inheritance
24.3.4.1 Member/Hierarchy Tradeoffs24.3.5 Use Relationships
24.3.4.2 Containment/Hierarchy Tradeoffs
24.3.6 Programmed-In Relationships
24.3.7 Relationships within a Class
24.3.7.1 Invariants
24.3.7.2 Assertions
24.3.7.3 Preconditions and Postconditions
24.3.7.4 Encapsulation
24.4.1 Templates24.5 Advice
24.4.2 Interfaces and Implementations
24.4.3 Fat Interfaces
25.1 Kinds of Classes
25.2 Concrete Types
25.2.1 Reuse of Concrete Types25.3 Abstract Types
25.4 Node Classes
25.4.1 Changing Interfaces25.5 Actions
25.6 Interface Classes
25.6.1 Adjusting Interfaces25.7 Handle Classes
25.7.1 Operations in Handles25.8 Application Frameworks
25.9 Advice
25.10 Exercises
Appendices:
A The C++ Grammar ... pg 793Index ... pg 969
A.1 IntroductionB Compatibility
A.2 Keywords
A.3 Lexical Conventions
A.4 Programs
A.5 Expressions
A.6 Statements
A.7 Declarations
A.7.1 DeclaratorsA.8 Classes
A.8.1 Derived ClassesA.8.2 Special Member Functions
A.8.3 Overloading
A.9 Templates
A.10 Exception Handling
A.11 Preprocessing DirectivesB.1 IntroductionC Technicalities
B.2 C/C++ Compatibility
B.2.1 ``Silent'' DifferencesB.3 Coping with Older C++ Implementations
B.2.2 C Code That Is Not C++
B.2.3 Deprecated Features
B.2.4 C++ Code That Is Not C
B.3.1 Headers
B.3.2 The Standard Library
B.3.3 Namespaces
B.3.4 Allocation Errors
B.3.5 Templates
B.3.6 For-Statement InitializersC.1 Introduction and OverviewD Locales
C.2 The Standard
C.3 Character Sets
C.3.1 Restricted Character SetsC.4 Types of Integer Literals
C.3.2 Escape Characters
C.3.3 Large Character Sets
C.3.4 Signed and Unsigned Characters
C.5 Constant Expressions
C.6 Implicit Type Conversion
C.6.1 PromotionsC.7 Multidimensional Arrays
C.6.2 Conversions
C.6.2.1 Integral ConversionsC.6.3 Usual Arithmetic Conversions
C.6.2.2 Floating-Point Conversions
C.6.2.3 Pointer and Reference Conversions
C.6.2.4 Pointer-to-Member Conversions
C.6.2.5 Boolean Conversions
C.6.2.6 Floating-Integral Conversions
C.7.1 VectorsC.8 Saving Space
C.7.2 Arrays
C.7.3 Passing Multidimensional Arrays
C.8.1 FieldsC.9 Memory Management
C.8.2 Unions
C.8.3 Unions and Classes
C.9.1 Automatic Garbage CollectionC.10 Namespaces
C.9.1.1 Disguised Pointers
C.9.1.2 Delete
C.9.1.3 Destructors
C.9.1.4 Memory Fragmentation
C.10.1 Convenience vs. SafetyC.11 Access Control
C.10.2 Nesting of Namespaces
C.10.3 Namespaces and Classes
C.11.1 Access to MembersC.12 Pointers to Data Members
C.11.2 Access to Base Classes
C.11.3 Access to Member Class
C.11.4 Friendship
C.13 Templates
C.13.1 Static MembersC.14 Advice
C.13.2 Friends
C.13.3 Templates as Template Parameters
C.13.4 Typename and Template
C.13.6 Template as a Qualifier
C.13.7 Instantiation
C.13.8 Name Binding
C.13.8.1 Dependent NamesC.13.9 When Is a Specialization Needed?
C.13.8.2 Point of Definition Binding
C.13.8.3 Point of Instantiation Binding
C.13.8.4 Templates and Namespaces
C.13.9.1 Template Function InstantiationC.13.10 Explicit InstantiationD.1 Handling Cultural DifferencesE Standard-Library Exception Safety
D.1.1 Programming Cultural DifferencesD.2 The locale Class
D.2.1 Named LocalesD.3 Facets
D.2.1.1 Constructing New Locales
D.2.2 Copying and Comparing Locales
D.2.3 The global() and the classic() Locales
D.2.4 Comparing Strings
D.3.1 Accessing Facets in a LocaleD.4 Standard Facets
D.3.2 A Simple User-Defined Facet
D.3.3 Uses of Locales and Facets
D.4.1 String ComparisonD.5 Advice
D.4.1.1 Named CollateD.4.2 Numeric Input and Output
D.4.2.1 Numeric PunctuationD.4.3 Input and Output of Monetary Values
D.4.2.2 Numeric Output
D.4.2.3 Numeric Input
D.4.3.1 Money PunctuationD.4.4 Date and Time Input and Output
D.4.3.2 Money Output
D.4.3.3 Money Input
D.4.4.1 Clocks and TimersD.4.5 Character Classification
D.4.4.2 A Date Class
D.4.4.3 Date and Time Output
D.4.4.4 Date and Time Input
D.4.4.5 A More Flexible Date Class
D.4.4.6 Specifying a Date Format
D.4.4.7 A Date Input Facet
D.4.5.1 Convenience InterfacesD.4.6 Character Code Conversion
D.4.7 Messages
D.4.7.1 Using Messages from Other Facets
D.6 ExercisesE.1 Introduction
E.2 Exception Safety
E.3 Exception-Safe Implementation Techniques
E.3.1 A Simple VectorE.4 Standard Container Guarantees
E.3.2 Representing Memory Explicitly
E.3.3 Assignment
E.3.4 push_back()
E.3.5 Constructors and Invariants
E.3.5.1 Using init() Functions
E.3.5.2 Relying on a Default Valid State
E.3.5.3 Delaying resource acquisition
E.4.1 Insertion and Removal of ElementsE.5 The Rest of the Standard Library
E.4.2 Guarantees and Tradeoffs
E.4.3 Swap
E.4.4 Initialization and Iterators
E.4.5 References to Elements
E.4.6 Predicates
E.5.1 StringsE.6 Implications for Library Users
E.5.2 Streams
E.5.3 Algorithms
E.5.4 Valarray and Complex
E.5.5 The C Standard Library
E.7 Advice
E.8 Exercises