<!--
    Licensed to the Apache Software  Foundation (ASF) under one or more
    contributor  license agreements.  See  the NOTICE  file distributed
    with  this  work  for  additional information  regarding  copyright
    ownership.   The ASF  licenses this  file to  you under  the Apache
    License, Version  2.0 (the  License); you may  not use  this file
    except in  compliance with the License.   You may obtain  a copy of
    the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the  License is distributed on an  "AS IS" BASIS,
    WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
    implied.   See  the License  for  the  specific language  governing
    permissions and limitations under the License.

    Copyright 1999-2007 Rogue Wave Software, Inc.
-->

<HTML>
<HEAD>
<TITLE>About This Manual</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="1-4.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="II.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library User's Guide</B></DIV>
<H2>1.5 About This Manual</H2>
<A NAME="151"><H3>1.5.1 Assumptions</H3></A>
<P>This manual assumes that you are familiar with the basic features of the C++ programming language. If you are new to C++, you may want to start with an introductory text, such as <I>The C++ Programming Language</I> by Bjarne Stroustrup (Addison-Wesley, 1997).</P>
<A NAME="152"><H3>1.5.2 Conventions</H3></A>
<A NAME="idx7"><!></A>
<P>This manual uses some distinctive terms and conventions. </P>
<P><I>Abbreviations</I> are common. Template abbreviations are very common, since the C++ Standard Library contains so many long names for class and function templates. For example, in the iostreams part of the documentation, <SAMP>fstream</SAMP> stands for <SAMP>template &lt;class charT, class traits&gt; class basic_fstream</SAMP>. The term <I>filestream </I>stands for the abstract notion of the file stream class template. <SAMP>badbit&nbsp;</SAMP>stands for the state flag <SAMP>std::ios_base::badbit</SAMP>.</P>
<P><I>Hierarchy diagrams</I> use the formal template declarations. In the hierarchy diagrams, the standard UML arrow:</P>
<P><IMG SRC="images/stdlibug-Overviewa.gif" WIDTH=240 HEIGHT=98></P>
<P>indicates that class <B><I>B</I></B> inherits from class <B><I>A</I></B>.  </P>
<A NAME="idx8"><!></A>
<P>The term <I>algorithm</I> indicates functions in the generic algorithms portion of the C++ Standard Library. This is intended to avoid confusion with member functions, argument functions, and user-defined functions. </P>
<P>An <I>empty pair of parentheses</I> <SAMP>()</SAMP> follows function names and algorithm names, so as to avoid emphasizing their arguments. Arguments may be omitted for clarity.</P>
<P>An <I>underline character</I> <SAMP>_</SAMP>  is used as a separator in both class names and function names. </P>
<P><I>Special fonts</I> set off class names, code samples, and special meanings, as shown in&nbsp;<A HREF="1-5.html#Table&nbsp;2">Table&nbsp;2</A>:.</P>
<H4><A NAME="Table&nbsp;2">Table&nbsp;2: Typographic conventions</A></H4>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="3">
<tr><td valign=top><B>Convention</B>
</td><td valign=top><B>Purpose</B>
</td><td valign=top><B>Example</B>
</td></tr>
<tr><td valign=top><P CLASS="TABLE"><SAMP>Courier</SAMP></P>
</td><td valign=top><P CLASS="TABLE">Code, examples, function names, file names, directory names, and operating system commands.</P>
</td><td valign=top><P CLASS="TABLE"><SAMP>return result;</SAMP></P>
</td></tr>
<tr><td valign=top><P CLASS="TABLE"><I>italic</I></P>
</td><td valign=top><P CLASS="TABLE">Conventional uses such as emphasis, titles, and new terms.</P>
</td><td valign=top><P CLASS="TABLE">A <I>comparison function object</I> is...</P>
</td></tr>
<tr><td valign=top><P CLASS="TABLE"><B>bold</B></P>
</td><td valign=top><P CLASS="TABLE">Conventional uses such as <B>emphasis</B>.</P>
<P CLASS="TABLE">Commands from an interface.</P>
</td><td valign=top><P CLASS="TABLE"><B>Always</B> read the manual.<br></P>
<P CLASS="TABLE">Click on the <B>OK</B> button.</P>
</td></tr>
<tr><td valign=top><P CLASS="TABLE"><B><I>bold italic</I></B></P>
</td><td valign=top><P CLASS="TABLE">Class names.</P>
</td><td valign=top><P CLASS="TABLE"><B><I><A HREF="../stdlibref/priority-queue.html">priority_queue</A></I></B></P>
</td></tr>
</TABLE>
<P>Throughout this guide, we use the character <SAMP>\</SAMP> to separate directory names. If you use UNIX, change <SAMP>\</SAMP> to <SAMP>/</SAMP>.</P>
<A NAME="153"><H3>1.5.3 Organization</H3></A>
<P>This manual is organized into eight parts:</P>
<UL>
<LI><P CLASS="LIST"><B><A HREF="I.html">Part&nbsp;I, "Introduction,"</A></B> provides overviews of the product, the documentation, and this manual, <I>The Apache C++ Standard Library User Guide</I>. </P></LI>
<LI><P CLASS="LIST"><B><A HREF="II.html">Part&nbsp;II, "Fundamentals,"</A></B> explains the fundamental C++ Standard Library concepts of iterators, functions, and predicates.</P></LI>
<LI><P CLASS="LIST"><B><A HREF="III.html">Part&nbsp;III, "Containers,"</A></B> gives an overview of the data structures called <I>containers</I>, and devotes a chapter to describing each container in detail, with an example. </P></LI>
<LI><P CLASS="LIST"><B><A HREF="IV.html">Part&nbsp;IV, "Algorithms,"</A></B> deals with the algorithms, devoting one chapter to the generic algorithms, and another to the generic algorithms specific to ordered collections. Within the two algorithm chapters, each kind of algorithm is explained in its own section, with an example and a reference to the file containing the complete source code. </P></LI>
<LI><P CLASS="LIST"><B><A HREF="V.html">Part&nbsp;V, "Special Techniques,"</A></B> describes techniques such as using allocators, building containers and generic algorithms, using the traits technique, and dealing with exceptions.</P></LI>
<LI><P CLASS="LIST"><B><A HREF="VI.html">Part&nbsp;VI, "Special Classes,"</A></B> devotes a chapter to each of the four unique classes <B><I><A HREF="../stdlibref/auto-ptr.html">auto_ptr</A></I></B>, <B><I><A HREF="../stdlibref/complex.html">complex</A></I></B>, <B><I><A HREF="../stdlibref/numeric-limits.html">numeric_limits</A></I></B>, and <B><I><A HREF="../stdlibref/valarray.html">valarray</A></I></B>.</P></LI>
<LI><P CLASS="LIST"><B><A HREF="VII.html">Part&nbsp;VII, "Locales,"</A></B> describes the basics of internationalization.  It explains the differences between the C locale and the C++ locale. It defines a C++ locale and a facet, and tells how locales are created, composed, used, and replaced. It includes a complex example of a user-defined facet, which demonstrates how facets can be built and used in conjunction with iostreams.</P></LI>
<LI><P CLASS="LIST"><B><A HREF="VIII.html">Part&nbsp;VIII, "Iostreams,"</A></B> explains the C++ stream input and output facilities commonly called <I>iostreams</I>. Beginning chapters cover the iostreams facility, how it works, and how it should be used; also, the iostreams architecture, its components, and class hierarchy. Middle chapters cover the basic operation of iostreams, and both simple and advanced techniques for extending the iostreams framework. Final chapters describe the main differences between the C++ Standard Library iostreams, the traditional iostreams, and the implementation of iostreams in the Apache C++ Standard Library. </P></LI>
</UL>
<A NAME="154"><H3>1.5.4 Reading Suggestion</H3></A>
<P>The first time you read this manual it may be hard to know where to start. The container definitions form the heart of the library, but you can't really appreciate them without understanding the algorithms that so greatly extend their functionality. On the other hand, you can't really understand the algorithms without some appreciation of the containers. </P>
<P>A good approach is to read <B>Part II Fundamentals</B> carefully. Next, skim the definitions of the containers in <B>Part III Containers</B> and the descriptions of the algorithms in <B>Part IV Algorithms</B>, then go back and read these parts in more detail. You can then proceed to the more specialized areas of the manual.</P>

<BR>
<HR>
<A HREF="1-4.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="II.html"><IMG SRC="images/bnext.gif" WIDTH=20 HEIGHT=21 ALT="Next file" BORDER=O></A>

<!-- Google Analytics tracking code -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
    _uacct = "UA-1775151-1";
    urchinTracker();
</script>
<!-- end of Google Analytics tracking code -->

</BODY>
</HTML>
