Standard C++ not only incorporates
all the Standard C libraries, with small additions and changes to support type
safety, it also adds libraries of its own. These libraries are far more powerful
than those in Standard C; the leverage you get from them is analogous to the
leverage you get from changing from C to C++.
This section of the book gives you an
in-depth introduction to the most important portions of the Standard C++
library.
The most complete and also the most
obscure reference to the full libraries is the Standard itself. Somewhat more
readable (and yet still a self-described “expert’s guide”) is
Bjarne Stroustrup’s 3rd Edition of The C++ Programming
Language (Addison-Wesley, 1997). Another valuable reference is the
3rd edition of C++ Primer, by Lippman & Lajoie.
The goal of the chapters in this book that cover the libraries is to provide
you with an encyclopedia of descriptions and examples so you’ll have a
good starting point for solving any problem that requires the use of the
Standard libraries. However, there are some techniques and topics that are used
rarely enough that they are not covered here, so if you can’t find it in
these chapters you should reach for the other two books; this book is not
intended to replace those but rather to complement them. In particular, I hope
that after going through the material in the following chapters you’ll
have a much easier time understanding those books.
You will notice that this section does
not contain exhaustive documentation describing every function and class in the
Standard C++ library. I’ve left the full descriptions to others; in
particular there a particularly good on-line sources of standard library
documentation in HTML format that you can keep resident on your computer and
view with a Web browser whenever you need to look something up. This is PJ
Plauger’s Dinkumware C/C++ Library reference at http://www.dinkumware.com.
You can view this on-line, and purchase it for local viewing. It contains
complete reference pages for the both the C and C++ libraries (so it’s
good to use for all your Standard C/C++ programming questions). I am
particularly fond of electronic documentation not only because you can always
have it with you, but also because you can do an electronic search for what
you’re seeking.
When you’re actively programming,
these resources should adequately satisfy your reference needs (and you can use
them to look up anything in this chapter that isn’t clear to you).
Appendix XX lists additional
references.
[[ Still needs work ]]
The first chapter in this section
introduces the Standard C++ string class, which is a powerful tool that
simplifies most of the text processing chores you might have to do. The
string class may be the most thorough string manipulation tool
you’ve ever seen. Chances are, anything you’ve done to character
strings with lines of code in C can be done with a member function call in the
string class, including append( ), assign( ),
insert( ), remove( ), replace( ),
resize( ), copy( ), find( ),
rfind( ), find_first_of( ), find_last_of( ),
find_first_not_of( ), find_last_not_of( ),
substr( ), and compare( ). The operators =,
+=, and [ ] are also overloaded to perform the intuitive
operations. In addition, there’s a “wide” wstring class
designed to support international character sets. Both string and
wstring (declared in <string>, not to be confused with
C’s <string.h>, which is, in strict C++,
<cstring>) are created from a common template class called
basic_string. Note that the string classes are seamlessly integrated with
iostreams, virtually eliminating the need for you to ever
use strstream.
The next chapter covers the
iostream library.
Language
Support. Elements inherent to the language itself,
like implementation limits in
<climits> and <cfloat>; dynamic memory declarations in
<new> like bad_alloc (the exception
thrown when you’re out of memory) and
set_new_handler; the <typeinfo>
header for RTTI and the <exception> header
that declares the terminate( ) and
unexpected( ) functions.
Diagnostics
Library. Components C++ programs can use to detect
and report errors. The <exception> header declares the standard
exception classes and
<cassert> declares the same thing as C’s
assert.h.
General Utilities
Library. These components are used by other parts of
the Standard C++ library, but you can also use them in your own programs.
Included are templatized versions of operators !=, >,
<=, and >= (to prevent redundant definitions), a pair
template class with a tuple-making template
function, a set of function
objects for support of the STL, and storage
allocation functions for use with the STL so you can
easily modify the storage allocation mechanism.
Localization
Library. This allows you to localize strings in your
program to adapt to usage in different countries,
including money, numbers, date, time, and so on.
Containers
Library. This includes the Standard Template Library
(described in the next section of this appendix) and also the bits
and bit_string
classes in <bits> and
<bitstring>, respectively. Both bits and bit_string
are more complete implementations of the bitvector concept introduced in Chapter
XX. The bits template creates a fixed-sized array of bits that can be
manipulated with all the bitwise operators, as well as member functions like
set( ), reset( ), count( ),
length( ), test( ), any( ), and
none( ). There are also conversion operators
to_ushort( ), to_ulong( ), and to_string( ).
The bit_string class is, by
contrast, a dynamically sized array of bits, with similar operations to
bits, but also with additional operations that make it act somewhat like
a string. There’s a fundamental difference in bit weighting: With
bits, the right-most bit (bit zero) is the least significant bit, but
with bit_string, the right-most bit is the most significant bit.
There are no conversions between bits and bit_string. You’ll
use bits for a space-efficient set of on-off flags and bit_string
for manipulating arrays of binary values (like pixels).
Iterators
Library. Includes iterators that are tools for the
STL (described in the next section of this appendix), streams, and stream
buffers.
Algorithms
Library. These are the template functions that
perform operations on the STL containers using iterators.
The algorithms include: adjacent_find, prev_permutation,
binary_search, push_heap, copy, random_shuffle,
copy_backward, remove, count, remove_copy,
count_if, remove_copy_if, equal, remove_if,
equal_range, replace, fill, replace_copy,
fill_n, replace_copy_if, find, replace_if,
find_if, reverse, for_each, reverse_copy,
generate, rotate, generate_n, rotate_copy,
includes, search, inplace_merge, set_difference,
lexicographical_compare, set_intersection, lower_bound,
set_symmetric_difference, make_heap, set_union, max,
sort, max_element, sort_heap, merge,
stable_partition, min, stable_sort, min_element,
swap, mismatch, swap_ranges, next_permutation,
transform, nth_element, unique, partial_sort,
unique_copy, partial_sort_copy, upper_bound, and
partition.
Numerics
Library. The goal of this library is to allow the
compiler implementer to take advantage of the architecture of the underlying
machine when used for numerical operations. This way,
creators of higher level numerical libraries can write to the numerics library
and produce efficient algorithms without having to customize to every possible
machine. The numerics library also includes the complex number
class (which appeared in the first
version of C++ as an example, and has become an expected part of the library) in
float, double, and long double forms.