| |
| |
Foreword | |
| |
| |
Foreword to the First Edition | |
| |
| |
Preface | |
| |
| |
| |
Tutorial Introduction to STL | |
| |
| |
| |
Introduction | |
| |
| |
| |
Who Should Read This Book | |
| |
| |
| |
What Generic Programming Is and Why It's Important | |
| |
| |
| |
How C++ Templates Enable Generic Programming | |
| |
| |
| |
The "Code Bloat" Problem with Templates | |
| |
| |
| |
Understanding STL's Performance Guarantees | |
| |
| |
| |
Overview of STL Components | |
| |
| |
| |
Containers | |
| |
| |
| |
Generic Algorithms | |
| |
| |
| |
Iterators | |
| |
| |
| |
Function Objects | |
| |
| |
| |
Adaptors | |
| |
| |
| |
Allocators | |
| |
| |
| |
How STL Differs from Other Libraries | |
| |
| |
| |
Extensibility | |
| |
| |
| |
Component Interchangeability | |
| |
| |
| |
Algorithm/Container Compatibility | |
| |
| |
| |
Iterators | |
| |
| |
| |
Input Iterators | |
| |
| |
| |
Output Iterators | |
| |
| |
| |
Forward Iterators | |
| |
| |
| |
Bidirectional Iterators | |
| |
| |
| |
Random Access Iterators | |
| |
| |
| |
The STL Iterator Hierarchy: Combining Algorithms and Containers Efficiently | |
| |
| |
| |
Insert Iterators | |
| |
| |
| |
Revisiting Input and Output: Stream Iterators | |
| |
| |
| |
Specification of Iterator Categories Required by STL Algorithms | |
| |
| |
| |
Designing Generic Algorithms | |
| |
| |
| |
Why Some Algorithms Require More Powerful Iterators | |
| |
| |
| |
Choosing the Right Algorithm | |
| |
| |
| |
Constant Versus Mutable Iterator Types | |
| |
| |
| |
Iterator Categories Provided by STL Containers | |
| |
| |
| |
Generic Algorithms | |
| |
| |
| |
Basic Algorithm Organization in STL | |
| |
| |
| |
Nonmutating Sequence Algorithms | |
| |
| |
| |
Mutating Sequence Algorithms | |
| |
| |
| |
Sorting-Related Algorithms | |
| |
| |
| |
Generalized Numeric Algorithms | |
| |
| |
| |
Sequence Containers | |
| |
| |
| |
Vectors | |
| |
| |
| |
Deques | |
| |
| |
| |
Lists | |
| |
| |
| |
Sorted Associative Containers | |
| |
| |
| |
Sets and Multisets | |
| |
| |
| |
Maps and Multimaps | |
| |
| |
| |
Function Objects | |
| |
| |
| |
Passing Functions via Function Pointers | |
| |
| |
| |
Advantages of Specifying Function Objects with Template Parameters | |
| |
| |
| |
STL-Provided Function Objects | |
| |
| |
| |
Container Adaptors | |
| |
| |
| |
Stack Container Adaptor | |
| |
| |
| |
Queue Container Adaptor | |
| |
| |
| |
Priority Queue Container Adaptor | |
| |
| |
| |
Iterator Adaptors | |
| |
| |
| |
Function Adaptors | |
| |
| |
| |
Binders | |
| |
| |
| |
Negators | |
| |
| |
| |
Adaptors for Pointers to Functions | |
| |
| |
| |
Putting It Together: Example Programs | |
| |
| |
| |
Program for Searching a Dictionary | |
| |
| |
| |
Finding Anagrams of a Given Word | |
| |
| |
| |
Interacting with the Standard String and I/O Streams Classes | |
| |
| |
| |
Generating Permutations and Searching the Dictionary | |
| |
| |
| |
Complete Program | |
| |
| |
| |
How Fast Is It? | |
| |
| |
| |
Program for Finding All Anagram Groups | |
| |
| |
| |
Finding Anagram Groups | |
| |
| |
| |
Defining a Data Structure to Work with STL | |
| |
| |
| |
Creating Function Objects for Comparisons | |
| |
| |
| |
Complete Anagram Group Finding Program | |
| |
| |
| |
Reading the Dictionary into a Vector of PS Objects | |
| |
| |
| |
Using a Comparison Object to Sort Word Pairs | |
| |
| |
| |
Using an Equality Predicate Object to Search for Adjacent Equal Elements | |
| |
| |
| |
Using a Function Adaptor to Obtain a Predicate Object | |
| |
| |
| |
Copying the Anagram Group to the Output Stream | |
| |
| |
| |
Output of the Anagram Program | |
| |
| |
| |
Better Anagram Program: Using the List and Map Containers | |
| |
| |
| |
Data Structure Holding Iterator Pairs | |
| |
| |
| |
Storing Information in a Map of Lists | |
| |
| |
| |
Outputting the Anagram Groups in Order of Size | |
| |
| |
| |
Better Anagram Program | |
| |
| |
| |
Output of the Program | |
| |
| |
| |
Why Use a Map Container? | |
| |
| |
| |
Faster Anagram Program: Using Multimaps | |
| |
| |
| |
Finding Anagram Groups, Version 3 | |
| |
| |
| |
Declaration of the Multimap | |
| |
| |
| |
Reading the Dictionary into the Multimap | |
| |
| |
| |
Finding the Anagram Groups in the Multimap | |
| |
| |
| |
Outputting the Anagram Groups in Order of Size | |
| |
| |
| |
Output of the Program | |
| |
| |
| |
How Fast Is It? | |
| |
| |
| |
Defining an Iterator Class | |
| |
| |
| |
New Kind of Iterator: Counting Iterator | |
| |
| |
| |
Counting Iterator Class | |
| |
| |
| |
Combining STL with Object-Oriented Programming | |
| |
| |
| |
Using Inheritance and Virtual Functions | |
| |
| |
| |
Avoiding "Code Bloat" from Container Instances | |
| |
| |
| |
Program for Displaying Theoretical Computer Science Genealogy | |
| |
| |
| |
Sorting Students by Date | |
| |
| |
| |
Associating Students with Advisors | |
| |
| |
| |
Finding the Roots of the Tree | |
| |
| |
| |
Reading the File | |
| |
| |
| |
Printing the Results | |
| |
| |
| |
Complete "Genealogy" Program | |
| |
| |
| |
Class for Timing Generic Algorithms | |
| |
| |
| |
Obstacles to Accurate Timing of Algorithms | |
| |
| |
| |
Overcoming the Obstacles | |
| |
| |
| |
Refining the Approach | |
| |
| |
| |
Automated Analysis with a Timer Class | |
| |
| |
| |
Timing the STL Sort Algorithms | |
| |
| |
| |
STL Reference Guide | |
| |
| |
| |
Iterator Reference Guide | |
| |
| |
| |
Input Iterator Requirements | |
| |
| |
| |
Output Iterator Requirements | |
| |
| |
| |
Forward Iterator Requirements | |
| |
| |
| |
Bidirectional Iterator Requirements | |
| |
| |
| |
Random Access Iterator Requirements | |
| |
| |
| |
Iterator Traits | |
| |
| |
| |
Iterator Operations | |
| |
| |
| |
Istream Iterators | |
| |
| |
| |
Ostream Iterators | |
| |
| |
| |
Reverse Iterators | |
| |
| |
| |
Back Insert Iterators | |
| |
| |
| |
Front Insert Iterators | |
| |
| |
| |
Insert Iterators | |
| |
| |
| |
Container Reference Guide | |
| |
| |
| |
Requirements | |
| |
| |
| |
Organization of the Container Class Descriptions | |
| |
| |
| |
Vector | |
| |
| |
| |
Deque | |
| |
| |
| |
List | |
| |
| |
| |
Set | |
| |
| |
| |
Multiset | |
| |
| |
| |
Map | |
| |
| |
| |
Multimap | |
| |
| |
| |
Stack Container Adaptor | |
| |
| |
| |
Queue Container Adaptor | |
| |
| |
| |
Priority Queue Container Adaptor | |
| |
| |
| |
Generic Algorithm Reference Guide | |
| |
| |
| |
Organization of the Algorithm Descriptions | |
| |
| |
| |
Nonmutating Sequence Algorithm Overview | |
| |
| |
| |
For Each | |
| |
| |
| |
Find | |
| |
| |
| |
Find First | |
| |
| |
| |
Adjacent Find | |
| |
| |
| |
Count | |
| |
| |
| |
Mismatch | |
| |
| |
| |
Equal | |
| |
| |
| |
Search | |
| |
| |
| |
Search N | |
| |
| |
| |
Find End | |
| |
| |
| |
Mutating Sequence Algorithm Overview | |
| |
| |
| |
Copy | |
| |
| |
| |
Swap | |
| |
| |
| |
Transform | |
| |
| |
| |
Replace | |
| |
| |
| |
Fill | |
| |
| |
| |
Generate | |
| |
| |
| |
Remove | |
| |
| |
| |
Unique | |
| |
| |
| |
Reverse | |
| |
| |
| |
Rotate | |
| |
| |
| |
Random Shuffle | |
| |
| |
| |
Partition | |
| |
| |
| |
Sorting-Related Algorithms Overview | |
| |
| |
| |
Sort | |
| |
| |
| |
Nth Element | |
| |
| |
| |
Binary Search | |
| |
| |
| |
Merge | |
| |
| |
| |
Set Operations on Sorted Structures | |
| |
| |
| |
Heap Operations | |
| |
| |
| |
Min and Max | |
| |
| |
| |
Lexicographical Comparison | |
| |
| |
| |
Permutation Generators | |
| |
| |
| |
Generalized Numeric Algorithms Overview | |
| |
| |
| |
Accumulate | |
| |
| |
| |
Inner Product | |
| |
| |
| |
Partial Sum | |
| |
| |
| |
Adjacent Difference | |
| |
| |
| |
Function Object and Function Adaptor Reference Guide | |
| |
| |
| |
Requirements | |
| |
| |
| |
Base Classes | |
| |
| |
| |
Arithmetic Operations | |
| |
| |
| |
Comparison Operations | |
| |
| |
| |
Logical Operations | |
| |
| |
| |
Negator Adaptors | |
| |
| |
| |
Binder Adaptors | |
| |
| |
| |
Adaptors for Pointers to Functions | |
| |
| |
| |
Adaptors for Pointers to Member Functions | |
| |
| |
| |
Allocator Reference Guide | |
| |
| |
| |
Introduction | |
| |
| |
| |
Allocator Requirements | |
| |
| |
| |
Default Allocator | |
| |
| |
| |
Custom Allocators | |
| |
| |
| |
Utilities Reference Guide | |
| |
| |
| |
Introduction | |
| |
| |
| |
Comparison Functions | |
| |
| |
| |
Pairs | |
| |
| |
| |
STL Header Files | |
| |
| |
| |
String Reference Guide | |
| |
| |
| |
String Classes | |
| |
| |
| |
Character Traits | |
| |
| |
| |
STL Include Files Used in Example Programs | |
| |
| |
| |
Files Used in Example 17.1 | |
| |
| |
| |
STL Resources | |
| |
| |
| |
Internet Addresses for SGI Reference Implementation of STL | |
| |
| |
| |
World Wide Web Address for Source Code for Examples in this Book | |
| |
| |
| |
STL-Compatible Compilers | |
| |
| |
| |
Other Related STL and C++ Documents | |
| |
| |
| |
Generic Programming and STL Discussion List | |
| |
| |
References | |
| |
| |
Index | |