In the beginning, I only planned to write a small German book
(400 pages or so) about the C++ Standard Library. That was in 1993.
Now, in 1999 you see the resultan English book with more than 800
pages of facts, figures, and examples. My goal is to describe the
C++ Standard Library so that all (or almost all) your programming
questions are answered before you think of the question. Note,
however, that this is not a complete description of all aspects of
the C++ Standard Library. Instead, I present the most important
topics necessary for learning and programming in C++by using its
standard library.
Each topic is described based on the general concepts;this
discussion then leads to the specific details needed to support
everyday programming tasks. Specific code examples are provided to
help you understand the concepts and the details.
That's itin a nutshell. I hope you get as much pleasure from
reading this book as I did from writing it. Enjoy!
Acknowledgments
This book presents ideas, concepts,solutions, and examples from
many sources. In a way it does not seem fair that my name is the
only name on the cover. Thus, I'd like to thank all the people and
companies who helped and supported me during the past few
years.
First, I'd like to thank Dietmar Kuhl. Dietmar is an expert on
C++, especially on input/output streams and internationalization
(he implemented an I/O stream library just for fun). He not only
translated major parts of this book from German to English, he also
wrote sections of this book using his expertise. In addition, he
provided me with invaluable feedback over the years.
Second, I'd like to thank all the reviewers and everyone else
who gave me their opinion. These people endow the book with a
quality it would never have had without their input. (Because the
list is extensive, please forgive me for any oversight.) The
reviewers for the English version of this book included Chuck
Allison, Greg Comeau, James A. Crotinger, Gabriel Dos Reis, Alan
Ezust, Nathan Meyers, Werner Mossner, Todd Veldhuizen, Chichiang
Wan, Judy Ward, and Thomas Wikehult. The German reviewers included
Ralf Boecker, Dirk Herrmann, Dietmar Kuhl, Edda Lorke, Herbert
Scheubner, Dominik Strasser, and Martin Weitzel. Additional input
was provided by Matt Austern, Valentin Bonnard, Greg Colvin, Beman
Dawes, Bill Gibbons, Lois Goldthwaite, Andrew Koenig, Steve
Rumbsby, Bjarne Stroustrup, and David Vandevoorde.
Special thanks to Dave Abrahams, Janet Cocker, Catherine Ohala,
and Maureen Willard who reviewed and edited the whole book very
carefully. Their feedback was an incredible contribution to the
quality of this book.
A special thanks goes to my "personal living dictionary"Herb
Sutterthe author of the famous "Guru of the Week" (a regular series
of C++ programming problems that is published on the
comp.std.c++.moderated Internet newsgroup).
I'd also like to thank all the people and companies who gave me
the opportunity to test my examples on different platforms with
different compilers. Many thanks to Steve Adamczyk, Mike Anderson,
and John Spicer from EDG for their great compiler and their
support. It was a big help during the standardization process and
the writing of this book. Many thanks to P. J. Plauger and
Dinkumware, Ltd, for their early standardconforming implementation
of the C++ Standard Library. Many thanks to Andreas Hommel and
Metrowerks for an evaluative version of their CodeWarrior
Programming Environment. Many thanks to all the developers of the
free GNU and egcs compilers. Many thanks to Microsoft for an
evaluative version of Visual C++. Many thanks to Roland Hartinger
from Siemens Nixdorf Informations Systems AG for a test version of
their C++ compiler. Many thanks to Topjects GmbH for an evaluative
version of the ObjectSpace library implementation.
And, of course many thanks for those who invented, designed, or
implemented C++ or parts of the library. Among others are Bjarne
Stroustrup, Alexander Stepanov, Meng Lee, Matt Austern, Boris P.
Fomichev, and all the other guys who wrote the SGI STL and the
STLport.
Many thanks to everyone from Addison Wesley Longman who worked
with me. Among others this includes Janet Cocker, Mike Hendrickson,
Debbie Lafferty, Marina Lang, Chanda Leary, Catherine Ohala, Marty
Rabinowitz, Susanne Spitzer,and Maureen Willard. It was fun.
In addition, I'd like to thank the people at BREDEX GmbH and all
the people in the C++ community, particularly those involved with
the standardization process, for their support and patience
(sometimes I ask really silly questions).
Last but not least, many thanks and kisses for my family: Ulli,
Lucas, Anica, and Frederic. I definitely did not have enough time
for them due to the writing of this book.
Have fun and be human!
About this Book
Soon after its introduction, C++ became a de facto standard in
objectoriented programming. This led to the goal of
standardization. Only by having a standard, could programs be
written that would run on different platformsfrom PCs to
mainframes. Furthermore, a standard C++ library would enable
programmers to use general components and a higher level of
abstraction without losing portability, rather than having to
develop all code from scratch.
The standardization process was started in 1989 by an
international ANSI/ISO committee. It developed the standard based
on Bjarne Stroustrup's books (The C++
Programming Language) and (The
Annotated C++ Reference Manual). After the standard
was completed in 1997,several formal motions by different countries
made it an international ISO and ANSI standard in 1998. The
standardization process included the development of a C++ Standard
Library. The library extends the core language to provide some
general components. By using C++'s ability to program new abstract
and generic types, the library provides a set of common classes and
interfaces. This gives programmers a higher level of abstraction.
The library provides the ability to use string types, different
data structures (such as dynamic arrays, linked lists, and binary
trees), different algorithms (such as different sorting
algorithms), numeric classes, input/output (I/O) classes, and
classes for internationalization support.
All of these are supported by a fairly simple programming
interface. These components are very important for many programs.
These days, data processing often means inputting, computing,
processing, and outputting large amounts of data, which are often
strings.
The library is not selfexplanatory. To use these components and
to benefit from their power,you need a good introduction that
explains the concepts and the important details instead of simply
listing the classes and their functions. This book is written
exactly for that purpose. First, it introduces the library and all
of its components from a conceptional point of view. Next, it
describes the details needed for practical programming. Examples
are included to demonstrate the exact usage of the components.
Thus, this book is a detailed introduction to the C++ library for
both the beginner and the practical programmer. Armed with the data
provided herein, you should be able to take full advantage of the
C++ Standard Library.
Caveat
I don't promise that everything described is easy and
selfexplanatory. The library provides a lot of flexibility,but
flexibility for nontrivial purposes has a price. Beware that the
library has traps and pitfalls,which I point out when we encounter
them and suggest ways of avoiding them.
What You Should Know Before Reading this Book
To get the most from this book you should already know C++. (The
book describes the standard components of C++, but not the language
itself.) You should be familiar with the concepts of classes,
inheritance,templates, and exception handling. However, you don't
have to know all of the minor details about the language. The
important details are described in the book (the minor details
about the language are more important for people who want to
implement the library rather than use it). Note that the language
has changed during the standardization process,so your knowledge
might not be up to date.
The section on newlang features provides a brief overview and
introduction of the latest language features that are important for
using the library. You should read this section if you are not sure
whether you know all the new features of C++ (such as the keyword
{\tt typename} and the concept of namespaces).
Style and Structure of the Book
The C++ Standard Library provides different components that are
somewhat but not totally independent of each other,so there is no
easy way to describe each part without mentioning others. I
considered several different approaches for presenting the contents
of this book. One was on the order of the C++ standard. However,
this is not the best way to explain the components of the C++
Standard Library from scratch. Another was to start with an
overview of all components followed by chapters that provided more
details. Alternatively, I could have sorted the components, trying
to find an order that had a minimum of crossreferences to other
sections. My solution was to use a mixture of all three
approaches.
I start with a brief introduction of the general concepts and
the utilities that are used by the library. Then, I describe all
the components, each in one or more chapters. The first component
is the standard template library (STL). There is no doubt that the
STL is the most powerful, most complex, and most exciting part of
the library. Its design influences other components heavily. Then I
describe the more selfexplanatory components, such as special
containers, strings,and numeric classes. The next component
discussed is one you probably know and use already: the
iostreamlib{}. It is followed by a discussion of
internationalization, which had some influence on the
iostreamlib{}.
Each component description begins with the component's purpose,
design, and some examples. Next, a detailed description follows
that begins with different ways to use the component, as well as
any traps and pitfalls associated with it. The description usually
ends with a reference section, in which you can find the exact
signature and definition of a component's classes and its
functions.
How to Read this Book
This book is a mix of introductory user's guide and structured
reference manual regarding the C++ Standard Library. The individual
components of the C++ Standard Library are independent of each
other, to some extent, so after reading Chapters 2 through 4 you
could read the chapters that discuss the individual components in
any order. Bear in mind,that Chapters 5 through 9 all describe the
same component. To understand the other STL chapters, you should
start with the introduction to the STL in chapter 5.
If you are a C++ programmer who wants to know, in general, the
concepts and all parts of the library, you could simply read the
book from the beginning to the end. However, you should skip the
reference sections (which usually are named something like
"...{} in detail}"). To program with certain
components of the C++ Standard Library, the best way to find
something is to use the index. I have tried to make the index very
comprehensive to save you time when you are looking for
something.
I can't explain all aspects at the same time, so you will find
many cross references. It is always a problem to decide whether to
follow them. If the cross reference refers to a section that will
follow soon, take it as hint that I return to an aspect later. You
should follow the cross reference only if you are searching for
certain aspects or details and the cross reference seems to lead to
details concerning your problem or its solution.
In my experience, the best way to learn something new is to look
at examples. Therefore, you'll find a lot of examples throughout
the book. They may be a few lines of code or complete programs. In
the latter case, you'll find the name of the file containing the
program's first comment line. You can find the files on the
Internet at my Web site http://www.josuttis.com/libbook/.
State of the Art
While I was writing this book,the C++ standard was completed.
Please bear in mind that some compilers might not yet confirm to
it. This will most likely change in the near future. As a
consequence, you might discover that not all things covered in this
book work as described on your system,and you may have to change
example programs to fit your specific environment. I can compile
almost all example programs with version 2.8 or higher of the EGCS
compiler, which is free for almost all platforms and available on
the Internet (see http://egcs.cygnus.com/) and on
several software CDs.
Example Code and Additional Information
You can access all example programs and acquire more
informations about this book and the C++ Standard Library from my
Web site at http://www.josuttis.com/libbook/.
Please read the {\tt README} file for further details.
Also, you can find a lot of additional information about this topic
on the Internet. See Internet Resources on page 743 for
details.
Feedback
I welcome your feedback (good and bad) on this book. I tried to
prepare it carefully; however, I'm human, and at some time I have
to stop writing and tweaking. So, you may find some errors,
inconsistencies, or subjects that could be described better. Your
feedback will give me the chance to improve later
editions. The best way to reach me is by Email:
libbook@josuttis.
You can also reach me by phone, fax, or "snail" mail:
Nicolai M. Josuttis
Berggarten 9
D38108
Braunschweig
Germany
Phone: +49 5309 5747
Fax: +49 5309 5774
Many thanks.
0201379260P04062001