2000-09-26 05:42:14 +08:00
|
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
|
|
|
|
<HTML>
|
|
|
|
<HEAD>
|
|
|
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
|
|
|
<META NAME="AUTHOR" CONTENT="pme@sources.redhat.com (Phil Edwards)">
|
configopts.html, [...]: Remove many EGCS references...
* docs/configopts.html, docs/install.html, docs/17_intro/BADNAMES,
docs/17_intro/howto.html, docs/18_support/howto.html,
docs/19_diagnostics/howto.html, docs/20_util/howto.html,
docs/21_strings/howto.html, docs/22_locale/howto.html,
docs/23_containers/howto.html, docs/24_iterators/howto.html,
docs/25_algorithms/howto.html, docs/26_numerics/howto.html,
docs/27_io/howto.html, docs/ext/howto.html, docs/faq/index.html:
Remove many EGCS references; use current absolute URLs on
gcc.gnu.org or sources.redhat.com for messages in list archives.
* docs/faq/index.txt: Regenerate.
From-SVN: r36988
2000-10-21 08:51:50 +08:00
|
|
|
<META NAME="KEYWORDS" CONTENT="HOWTO, libstdc++, GCC, g++, libg++, STL">
|
2000-09-26 05:42:14 +08:00
|
|
|
<META NAME="DESCRIPTION" CONTENT="Notes for the libstdc++ extensions.">
|
|
|
|
<META NAME="GENERATOR" CONTENT="vi and eight fingers">
|
|
|
|
<TITLE>libstdc++-v3 HOWTO: Extensions</TITLE>
|
|
|
|
<LINK REL=StyleSheet HREF="../lib3styles.css">
|
2000-12-10 12:04:56 +08:00
|
|
|
<!-- $Id: howto.html,v 1.4 2000/12/03 23:47:49 jsm28 Exp $ -->
|
2000-09-26 05:42:14 +08:00
|
|
|
</HEAD>
|
|
|
|
<BODY>
|
|
|
|
|
|
|
|
<H1 CLASS="centered"><A NAME="top">Extensions</A></H1>
|
|
|
|
|
|
|
|
<P>Here we will make an attempt at describing the non-Standard extensions to
|
|
|
|
the library. Some of these are from SGI's STL, some of these are GNU's,
|
|
|
|
and some just seemed to appear on the doorstep.
|
|
|
|
</P>
|
|
|
|
<P><B>Before you leap in and use these</B>, be aware of two things:
|
|
|
|
<OL>
|
|
|
|
<LI>Non-Standard means exactly that. The behavior, and the very
|
|
|
|
existence, of these extensions may change with little or no
|
|
|
|
warning. (Ideally, the really good ones will appear in the next
|
|
|
|
revision of C++.) Also, other platforms, other compilers, other
|
|
|
|
versions of g++ or libstdc++-v3 may not recognize these names, or
|
|
|
|
treat them differently, or...
|
|
|
|
<LI>You should know how to <A HREF="../faq/index.html#5_4">access
|
|
|
|
these headers properly</A>.
|
|
|
|
</OL>
|
|
|
|
</P>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ####################################################### -->
|
|
|
|
<HR>
|
|
|
|
<H1>Contents</H1>
|
|
|
|
<UL>
|
|
|
|
<LI><A HREF="#1">Ropes and trees and hashes, oh my!</A>
|
|
|
|
<LI><A HREF="#2">Added members</A>
|
|
|
|
<LI><A HREF="#3">Allocators</A>
|
|
|
|
</UL>
|
|
|
|
|
|
|
|
<HR>
|
|
|
|
|
|
|
|
<!-- ####################################################### -->
|
|
|
|
|
|
|
|
<H2><A NAME="1">Ropes and trees and hashes, oh my!</A></H2>
|
|
|
|
<P>The SGI headers
|
|
|
|
<PRE>
|
|
|
|
<bvector>
|
|
|
|
<hash_map>
|
|
|
|
<hash_set>
|
|
|
|
<rope>
|
|
|
|
<slist>
|
|
|
|
<tree>
|
|
|
|
</PRE> are all here; <TT><bvector></TT> exposes the old bit_vector
|
|
|
|
class that was used before specialization of vector<bool> was
|
|
|
|
available. <TT><hash_map></TT> and <TT><hash_set></TT>
|
|
|
|
are discussed further below. <TT><rope></TT> is the SGI
|
|
|
|
specialization for large strings ("rope," "large
|
|
|
|
strings," get it? love those SGI folks).
|
|
|
|
<TT><slist></TT> is a singly-linked list, for when the
|
|
|
|
doubly-linked <TT>list<></TT> is too much space overhead, and
|
|
|
|
<TT><tree></TT> exposes the red-black tree classes used in the
|
|
|
|
implementation of the standard maps and sets.
|
|
|
|
</P>
|
|
|
|
<P>Okay, about those hashing classes... I'm going to foist most of the
|
|
|
|
work off onto SGI's own site.
|
|
|
|
</P>
|
|
|
|
<P>Each of the associative containers map, multimap, set, and multiset
|
|
|
|
have a counterpart which uses a
|
|
|
|
<A HREF="http://www.sgi.com/Technology/STL/HashFunction.html">hashing
|
|
|
|
function</A> to do the arranging, instead of a strict weak ordering
|
|
|
|
function. The classes take as one of their template parameters a
|
|
|
|
function object that will return the hash value; by default, an
|
|
|
|
instantiation of
|
|
|
|
<A HREF="http://www.sgi.com/Technology/STL/hash.html">hash</A>.
|
|
|
|
You should specialize this functor for your class, or define your own,
|
|
|
|
before trying to use one of the hashing classes.
|
|
|
|
</P>
|
|
|
|
<P>The hashing classes support all the usual associative container
|
|
|
|
functions, as well as some extra constructors specifying the number
|
|
|
|
of buckets, etc.
|
|
|
|
</P>
|
2000-10-06 04:15:29 +08:00
|
|
|
<P>Why would you want to use a hashing class instead of the
|
|
|
|
"normal" implementations? Matt Austern writes:
|
|
|
|
<BLOCKQUOTE><EM>[W]ith a well chosen hash function, hash tables
|
|
|
|
generally provide much better average-case performance than binary
|
|
|
|
search trees, and much worse worst-case performance. So if your
|
|
|
|
implementation has hash_map, if you don't mind using nonstandard
|
|
|
|
components, and if you aren't scared about the possibility of
|
|
|
|
pathological cases, you'll probably get better performance from
|
|
|
|
hash_map.</EM></BLOCKQUOTE>
|
|
|
|
</P>
|
2000-09-26 05:42:14 +08:00
|
|
|
<P>(Side note: for those of you wondering, <B>"Why wasn't a hash
|
|
|
|
table included in the Standard in the first #!$@ place?"</B> I'll
|
|
|
|
give a quick answer: it was proposed, but too late and in too
|
|
|
|
unorganized a fashion. Some sort of hashing will undoubtably be
|
|
|
|
included in a future Standard.
|
|
|
|
</P>
|
|
|
|
<P>Return <A HREF="#top">to top of page</A> or
|
|
|
|
<A HREF="../faq/index.html">to the FAQ</A>.
|
|
|
|
</P>
|
|
|
|
|
|
|
|
<HR>
|
|
|
|
<H2><A NAME="2">Added members</A></H2>
|
|
|
|
<P>Some of the classes in the Standard Library have additional
|
|
|
|
publicly-available members. Of those, some are intended purely for
|
|
|
|
the implementors, for example, additional typedefs. Those won't be
|
|
|
|
described here (or anywhere else). This list will grow slowly, since
|
|
|
|
we expect it to be rare -- most extensions will be self-contained.
|
|
|
|
</P>
|
|
|
|
<P>
|
|
|
|
<UL>
|
|
|
|
<LI><TT>filebuf</TT>s have another ctor with this signature:<BR>
|
|
|
|
<TT>basic_filebuf(int __fd, const char* __name, ios_base::openmode __mode);</TT>
|
|
|
|
<BR>This comes in very handy in a number of places, such as
|
|
|
|
attaching Unix sockets, pipes, and anything else which uses file
|
|
|
|
descriptors, into the IOStream buffering classes. The three
|
|
|
|
arguments are as follows:<BR>
|
|
|
|
<TT>int __fd, </TT>// open file descriptor<BR>
|
|
|
|
<TT>const char* __name, </TT><BR>
|
|
|
|
<TT>ios_base::openmode __mode </TT>// same as the other openmode uses
|
|
|
|
</UL>
|
|
|
|
</P>
|
|
|
|
<P>Return <A HREF="#top">to top of page</A> or
|
|
|
|
<A HREF="../faq/index.html">to the FAQ</A>.
|
|
|
|
</P>
|
|
|
|
|
|
|
|
<HR>
|
|
|
|
<H2><A NAME="3">Allocators</A></H2>
|
|
|
|
<P>This will be blank for a while. It will describe all of the different
|
|
|
|
memory allocators, most inherited from SGI's code. Input is solicited.
|
|
|
|
</P>
|
|
|
|
<P>Return <A HREF="#top">to top of page</A> or
|
|
|
|
<A HREF="../faq/index.html">to the FAQ</A>.
|
|
|
|
</P>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ####################################################### -->
|
|
|
|
|
|
|
|
<HR>
|
|
|
|
<P CLASS="fineprint"><EM>
|
|
|
|
Comments and suggestions are welcome, and may be sent to
|
|
|
|
<A HREF="mailto:pme@sources.redhat.com">Phil Edwards</A> or
|
configopts.html, [...]: Remove many EGCS references...
* docs/configopts.html, docs/install.html, docs/17_intro/BADNAMES,
docs/17_intro/howto.html, docs/18_support/howto.html,
docs/19_diagnostics/howto.html, docs/20_util/howto.html,
docs/21_strings/howto.html, docs/22_locale/howto.html,
docs/23_containers/howto.html, docs/24_iterators/howto.html,
docs/25_algorithms/howto.html, docs/26_numerics/howto.html,
docs/27_io/howto.html, docs/ext/howto.html, docs/faq/index.html:
Remove many EGCS references; use current absolute URLs on
gcc.gnu.org or sources.redhat.com for messages in list archives.
* docs/faq/index.txt: Regenerate.
From-SVN: r36988
2000-10-21 08:51:50 +08:00
|
|
|
<A HREF="mailto:gdr@gcc.gnu.org">Gabriel Dos Reis</A>.
|
2000-12-10 12:04:56 +08:00
|
|
|
<BR> $Id: howto.html,v 1.4 2000/12/03 23:47:49 jsm28 Exp $
|
2000-09-26 05:42:14 +08:00
|
|
|
</EM></P>
|
|
|
|
|
|
|
|
|
|
|
|
</BODY>
|
|
|
|
</HTML>
|