</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><spanclass="section"><ahref="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <codeclass="classname">exception</code></a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="manual/utilities.html">6.
Utilities
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><spanclass="section"><ahref="manual/pairs.html">Pairs</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html">Memory</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#idm234604985488">Interface Design</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm234604981936">Selecting Default Allocation Policy</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm234604968640">Disabling Memory Caching</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#idm234603392608">Class Hierarchy</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm234603370096">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm234603362800">Selecting Lock Policy</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm234603348176">Related functions and classes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#idm234603331760">Examples</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm234603328176">Unresolved Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="manual/traits.html">Traits</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="manual/strings.html">7.
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><spanclass="section"><ahref="manual/pairs.html">Pairs</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html">Memory</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#idm269891950848">Interface Design</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm269891947296">Selecting Default Allocation Policy</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm269891934000">Disabling Memory Caching</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#idm269891814224">Class Hierarchy</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm269891791712">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm269891784416">Selecting Lock Policy</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm269891769792">Related functions and classes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/memory.html#idm269891753440">Examples</a></span></dt><dt><spanclass="section"><ahref="manual/memory.html#idm269891749856">Unresolved Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="manual/traits.html">Traits</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="manual/strings.html">7.
Strings
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><spanclass="section"><ahref="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><spanclass="section"><ahref="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><spanclass="section"><ahref="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><spanclass="section"><ahref="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><spanclass="section"><ahref="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="manual/localization.html">8.
Localization
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><spanclass="section"><ahref="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="manual/facets.html">Facets</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#idm234603126096">Specializations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#codecvt.design.wchar_t_size"><spanclass="type">wchar_t</span> Size</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="manual/containers.html">9.
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><spanclass="section"><ahref="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="manual/facets.html">Facets</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#codecvt.design.wchar_t_size"><spanclass="type">wchar_t</span> Size</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><spanclass="section"><ahref="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="manual/containers.html">9.
Containers
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><spanclass="section"><ahref="manual/containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="manual/associative.html">Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><spanclass="section"><ahref="manual/associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><spanclass="section"><ahref="manual/associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="manual/unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/unordered_associative.html#containers.unordered.insert_hints">Insertion Hints</a></span></dt><dt><spanclass="section"><ahref="manual/unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><spanclass="section"><ahref="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="manual/iterators.html">10.
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><spanclass="section"><ahref="algorithms.html#algorithms.mutating.swap"><codeclass="function">swap</code></a></span></dt><dd><dl><dt><spanclass="section"><ahref="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
The neatest accomplishment of the algorithms section is that all the
work is done via iterators, not containers directly. This means two
@@ -77,11 +77,11 @@ _Alloc_traits</code> have been removed.
<spanclass="type">__alloc</span> to select an underlying allocator that
satisfied memory allocation requests. The selection of this
underlying allocator was not user-configurable.
</p><divclass="table"><aid="idm234595838080"></a><pclass="title"><strong>Table B.6. Extension Allocators</strong></p><divclass="table-contents"><tablesummary="Extension Allocators"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/></colgroup><thead><tr><thalign="left">Allocator (3.4)</th><thalign="left">Header (3.4)</th><thalign="left">Allocator (3.[0-3])</th><thalign="left">Header (3.[0-3])</th></tr></thead><tbody><tr><tdalign="left"><codeclass="classname">__gnu_cxx::new_allocator<T></code></td><tdalign="left"><codeclass="filename">ext/new_allocator.h</code></td><tdalign="left"><codeclass="classname">std::__new_alloc</code></td><tdalign="left"><codeclass="filename">memory</code></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::malloc_allocator<T></code></td><tdalign="left"><codeclass="filename">ext/malloc_allocator.h</code></td><tdalign="left"><codeclass="classname">std::__malloc_alloc_template<int></code></td><tdalign="left"><codeclass="filename">memory</code></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::debug_allocator<T></code></td><tdalign="left"><codeclass="filename">ext/debug_allocator.h</code></td><tdalign="left"><codeclass="classname">std::debug_alloc<T></code></td><tdalign="left"><codeclass="filename">memory</code></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::__pool_alloc<T></code></td><tdalign="left"><codeclass="filename">ext/pool_allocator.h</code></td><tdalign="left"><codeclass="classname">std::__default_alloc_template<bool,int></code></td><tdalign="left"><codeclass="filename">memory</code></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::__mt_alloc<T></code></td><tdalign="left"><codeclass="filename">ext/mt_allocator.h</code></td><tdalign="left"></td><tdalign="left"></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::bitmap_allocator<T></code></td><tdalign="left"><codeclass="filename">ext/bitmap_allocator.h</code></td><tdalign="left"></td><tdalign="left"></td></tr></tbody></table></div></div><brclass="table-break"/><p> Releases after gcc-3.4 have continued to add to the collection
</p><divclass="table"><aid="idm269884237408"></a><pclass="title"><strong>Table B.6. Extension Allocators</strong></p><divclass="table-contents"><tablesummary="Extension Allocators"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/></colgroup><thead><tr><thalign="left">Allocator (3.4)</th><thalign="left">Header (3.4)</th><thalign="left">Allocator (3.[0-3])</th><thalign="left">Header (3.[0-3])</th></tr></thead><tbody><tr><tdalign="left"><codeclass="classname">__gnu_cxx::new_allocator<T></code></td><tdalign="left"><codeclass="filename">ext/new_allocator.h</code></td><tdalign="left"><codeclass="classname">std::__new_alloc</code></td><tdalign="left"><codeclass="filename">memory</code></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::malloc_allocator<T></code></td><tdalign="left"><codeclass="filename">ext/malloc_allocator.h</code></td><tdalign="left"><codeclass="classname">std::__malloc_alloc_template<int></code></td><tdalign="left"><codeclass="filename">memory</code></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::debug_allocator<T></code></td><tdalign="left"><codeclass="filename">ext/debug_allocator.h</code></td><tdalign="left"><codeclass="classname">std::debug_alloc<T></code></td><tdalign="left"><codeclass="filename">memory</code></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::__pool_alloc<T></code></td><tdalign="left"><codeclass="filename">ext/pool_allocator.h</code></td><tdalign="left"><codeclass="classname">std::__default_alloc_template<bool,int></code></td><tdalign="left"><codeclass="filename">memory</code></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::__mt_alloc<T></code></td><tdalign="left"><codeclass="filename">ext/mt_allocator.h</code></td><tdalign="left"></td><tdalign="left"></td></tr><tr><tdalign="left"><codeclass="classname">__gnu_cxx::bitmap_allocator<T></code></td><tdalign="left"><codeclass="filename">ext/bitmap_allocator.h</code></td><tdalign="left"></td><tdalign="left"></td></tr></tbody></table></div></div><brclass="table-break"/><p> Releases after gcc-3.4 have continued to add to the collection
of available allocators. All of these new allocators are
standard-style. The following table includes details, along with
the first released version of GCC that included the extension allocator.
</h1></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.configure.enable"><codeclass="constant">GLIBCXX_ENABLE</code>, the <codeclass="literal">--enable</code> maker</a></span></dt></dl></dd><dt><spanclass="section"><ahref="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><spanclass="section"><ahref="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><spanclass="section"><ahref="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><spanclass="section"><ahref="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><spanclass="section"><ahref="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><spanclass="section"><ahref="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><spanclass="section"><ahref="internals.html#internals.os">Operating System</a></span></dt><dt><spanclass="section"><ahref="internals.html#internals.cpu">CPU</a></span></dt><dt><spanclass="section"><ahref="internals.html#internals.char_types">Character Types</a></span></dt><dt><spanclass="section"><ahref="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><spanclass="section"><ahref="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><spanclass="section"><ahref="test.html">Test</a></span></dt><dd><dl><dt><spanclass="section"><ahref="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><spanclass="section"><ahref="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><spanclass="section"><ahref="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><spanclass="section"><ahref="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><spanclass="section"><ahref="test.html#test.run.basic">Basic</a></span></dt><dt><spanclass="section"><ahref="test.html#test.run.variations">Variations</a></span></dt><dt><spanclass="section"><ahref="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><spanclass="section"><ahref="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><spanclass="section"><ahref="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><spanclass="section"><ahref="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><spanclass="section"><ahref="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><spanclass="section"><ahref="test.html#test.exception.safety">
Qualifying Exception Safety Guarantees
...
...
@@ -61,7 +61,7 @@ make all
in the build directory starts the build process. The <codeclass="literal">all</code> target comes from the <codeclass="filename">Makefile</code> file, which is generated via <spanclass="command"><strong>configure</strong></span> from the <codeclass="filename">Makefile.in</code> file, which is in turn generated (via
<spanclass="command"><strong>automake</strong></span>) from the file
<codeclass="filename">Makefile.am</code>.
</p></div><divclass="section"><divclass="titlepage"><div><div><h4class="title"><aid="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><divclass="figure"><aid="idm234596836000"></a><pclass="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/confdeps.png"align="middle"alt="Dependency Graph for Configure and Build Files"/></div></div></div><brclass="figure-break"/><p>
</p></div><divclass="section"><divclass="titlepage"><div><div><h4class="title"><aid="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><divclass="figure"><aid="idm269885235184"></a><pclass="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/confdeps.png"align="middle"alt="Dependency Graph for Configure and Build Files"/></div></div></div><brclass="figure-break"/><p>
Regenerate all generated files by using the command
<codeclass="code">autoreconf</code> at the top level of the libstdc++ source
There are a couple of ways to handle this kind of thing. Please
consider all of them before passing judgement. They include, in
no chaptericular order:
no particular order:
</p><divclass="itemizedlist"><ulclass="itemizedlist"style="list-style-type: disc; "><liclass="listitem"><p>A very large N in <codeclass="code">bitset<N></code>.</p></li><liclass="listitem"><p>A container<bool>.</p></li><liclass="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
<spanclass="emphasis"><em>A very large N in
<codeclass="code">bitset<N></code>. </em></span> It has been
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
</p></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="backwards.third"></a>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
libstdc++-v3.
</p><p>The subset commonly known as the Standard Template Library
(chapters 23 through 25, mostly) is adapted from the final release
(clauses 23 through 25, mostly) is adapted from the final release
of the SGI STL (version 3.3), with extensive changes.
</p><p>A more formal description of the V3 goals can be found in the
official <aclass="link"href="source_design_notes.html"title="Design Notes">design document</a>.
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
Facilities for concurrent operation, and control thereof.
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><spanclass="section"><ahref="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="associative.html">Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><spanclass="section"><ahref="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><spanclass="section"><ahref="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><spanclass="section"><ahref="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.insert_hints">Insertion Hints</a></span></dt><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.containers.sequences"></a>Sequences</h2></div></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="containers.sequences.list"></a>list</h3></div></div></div><divclass="section"><divclass="titlepage"><div><div><h4class="title"><aid="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
Yes it is, and that's okay. This is a decision that we preserved
when we imported SGI's STL implementation. The following is
following table provides the names and headers of the debugging
containers:
</p><divclass="table"><aid="idm234602378400"></a><pclass="title"><strong>Table 17.1. Debugging Containers</strong></p><divclass="table-contents"><tablesummary="Debugging Containers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/></colgroup><thead><tr><thalign="left">Container</th><thalign="left">Header</th><thalign="left">Debug container</th><thalign="left">Debug header</th></tr></thead><tbody><tr><tdalign="left"><codeclass="classname">std::bitset</code></td><tdalign="left"><codeclass="filename">bitset</code></td><tdalign="left"><codeclass="classname">__gnu_debug::bitset</code></td><tdalign="left"><codeclass="filename"><debug/bitset></code></td></tr><tr><tdalign="left"><codeclass="classname">std::deque</code></td><tdalign="left"><codeclass="filename">deque</code></td><tdalign="left"><codeclass="classname">__gnu_debug::deque</code></td><tdalign="left"><codeclass="filename"><debug/deque></code></td></tr><tr><tdalign="left"><codeclass="classname">std::list</code></td><tdalign="left"><codeclass="filename">list</code></td><tdalign="left"><codeclass="classname">__gnu_debug::list</code></td><tdalign="left"><codeclass="filename"><debug/list></code></td></tr><tr><tdalign="left"><codeclass="classname">std::map</code></td><tdalign="left"><codeclass="filename">map</code></td><tdalign="left"><codeclass="classname">__gnu_debug::map</code></td><tdalign="left"><codeclass="filename"><debug/map></code></td></tr><tr><tdalign="left"><codeclass="classname">std::multimap</code></td><tdalign="left"><codeclass="filename">map</code></td><tdalign="left"><codeclass="classname">__gnu_debug::multimap</code></td><tdalign="left"><codeclass="filename"><debug/map></code></td></tr><tr><tdalign="left"><codeclass="classname">std::multiset</code></td><tdalign="left"><codeclass="filename">set</code></td><tdalign="left"><codeclass="classname">__gnu_debug::multiset</code></td><tdalign="left"><codeclass="filename"><debug/set></code></td></tr><tr><tdalign="left"><codeclass="classname">std::set</code></td><tdalign="left"><codeclass="filename">set</code></td><tdalign="left"><codeclass="classname">__gnu_debug::set</code></td><tdalign="left"><codeclass="filename"><debug/set></code></td></tr><tr><tdalign="left"><codeclass="classname">std::string</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="classname">__gnu_debug::string</code></td><tdalign="left"><codeclass="filename"><debug/string></code></td></tr><tr><tdalign="left"><codeclass="classname">std::wstring</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="classname">__gnu_debug::wstring</code></td><tdalign="left"><codeclass="filename"><debug/string></code></td></tr><tr><tdalign="left"><codeclass="classname">std::basic_string</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="classname">__gnu_debug::basic_string</code></td><tdalign="left"><codeclass="filename"><debug/string></code></td></tr><tr><tdalign="left"><codeclass="classname">std::vector</code></td><tdalign="left"><codeclass="filename">vector</code></td><tdalign="left"><codeclass="classname">__gnu_debug::vector</code></td><tdalign="left"><codeclass="filename"><debug/vector></code></td></tr></tbody></table></div></div><brclass="table-break"/><p>In addition, when compiling in C++11 mode, these additional
</p><divclass="table"><aid="idm269890777616"></a><pclass="title"><strong>Table 17.1. Debugging Containers</strong></p><divclass="table-contents"><tablesummary="Debugging Containers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/></colgroup><thead><tr><thalign="left">Container</th><thalign="left">Header</th><thalign="left">Debug container</th><thalign="left">Debug header</th></tr></thead><tbody><tr><tdalign="left"><codeclass="classname">std::bitset</code></td><tdalign="left"><codeclass="filename">bitset</code></td><tdalign="left"><codeclass="classname">__gnu_debug::bitset</code></td><tdalign="left"><codeclass="filename"><debug/bitset></code></td></tr><tr><tdalign="left"><codeclass="classname">std::deque</code></td><tdalign="left"><codeclass="filename">deque</code></td><tdalign="left"><codeclass="classname">__gnu_debug::deque</code></td><tdalign="left"><codeclass="filename"><debug/deque></code></td></tr><tr><tdalign="left"><codeclass="classname">std::list</code></td><tdalign="left"><codeclass="filename">list</code></td><tdalign="left"><codeclass="classname">__gnu_debug::list</code></td><tdalign="left"><codeclass="filename"><debug/list></code></td></tr><tr><tdalign="left"><codeclass="classname">std::map</code></td><tdalign="left"><codeclass="filename">map</code></td><tdalign="left"><codeclass="classname">__gnu_debug::map</code></td><tdalign="left"><codeclass="filename"><debug/map></code></td></tr><tr><tdalign="left"><codeclass="classname">std::multimap</code></td><tdalign="left"><codeclass="filename">map</code></td><tdalign="left"><codeclass="classname">__gnu_debug::multimap</code></td><tdalign="left"><codeclass="filename"><debug/map></code></td></tr><tr><tdalign="left"><codeclass="classname">std::multiset</code></td><tdalign="left"><codeclass="filename">set</code></td><tdalign="left"><codeclass="classname">__gnu_debug::multiset</code></td><tdalign="left"><codeclass="filename"><debug/set></code></td></tr><tr><tdalign="left"><codeclass="classname">std::set</code></td><tdalign="left"><codeclass="filename">set</code></td><tdalign="left"><codeclass="classname">__gnu_debug::set</code></td><tdalign="left"><codeclass="filename"><debug/set></code></td></tr><tr><tdalign="left"><codeclass="classname">std::string</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="classname">__gnu_debug::string</code></td><tdalign="left"><codeclass="filename"><debug/string></code></td></tr><tr><tdalign="left"><codeclass="classname">std::wstring</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="classname">__gnu_debug::wstring</code></td><tdalign="left"><codeclass="filename"><debug/string></code></td></tr><tr><tdalign="left"><codeclass="classname">std::basic_string</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="classname">__gnu_debug::basic_string</code></td><tdalign="left"><codeclass="filename"><debug/string></code></td></tr><tr><tdalign="left"><codeclass="classname">std::vector</code></td><tdalign="left"><codeclass="filename">vector</code></td><tdalign="left"><codeclass="classname">__gnu_debug::vector</code></td><tdalign="left"><codeclass="filename"><debug/vector></code></td></tr></tbody></table></div></div><brclass="table-break"/><p>In addition, when compiling in C++11 mode, these additional
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <codeclass="classname">exception</code></a></span></dt></dl></dd><dt><spanclass="section"><ahref="concept_checking.html">Concept Checking</a></span></dt></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
All exception objects are defined in one of the standard header
An incomplete reference for HTML to Docbook conversion is
detailed in the table below.
</p><divclass="table"><aid="idm234596536320"></a><pclass="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><divclass="table-contents"><tablesummary="HTML to Docbook XML Markup Comparison"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/></colgroup><thead><tr><thalign="left">HTML</th><thalign="left">Docbook</th></tr></thead><tbody><tr><tdalign="left"><p></td><tdalign="left"><para></td></tr><tr><tdalign="left"><pre></td><tdalign="left"><computeroutput>, <programlisting>,
</p><divclass="table"><aid="idm269884935712"></a><pclass="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><divclass="table-contents"><tablesummary="HTML to Docbook XML Markup Comparison"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/></colgroup><thead><tr><thalign="left">HTML</th><thalign="left">Docbook</th></tr></thead><tbody><tr><tdalign="left"><p></td><tdalign="left"><para></td></tr><tr><tdalign="left"><pre></td><tdalign="left"><computeroutput>, <programlisting>,
And examples of detailed markup for which there are no real HTML
equivalents are listed in the table below.
</p><divclass="table"><aid="idm234596512176"></a><pclass="title"><strong>Table B.5. Docbook XML Element Use</strong></p><divclass="table-contents"><tablesummary="Docbook XML Element Use"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/></colgroup><thead><tr><thalign="left">Element</th><thalign="left">Use</th></tr></thead><tbody><tr><tdalign="left"><structname></td><tdalign="left"><structname>char_traits</structname></td></tr><tr><tdalign="left"><classname></td><tdalign="left"><classname>string</classname></td></tr><tr><tdalign="left"><function></td><tdalign="left">
</p><divclass="table"><aid="idm269884911568"></a><pclass="title"><strong>Table B.5. Docbook XML Element Use</strong></p><divclass="table-contents"><tablesummary="Docbook XML Element Use"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/></colgroup><thead><tr><thalign="left">Element</th><thalign="left">Use</th></tr></thead><tbody><tr><tdalign="left"><structname></td><tdalign="left"><structname>char_traits</structname></td></tr><tr><tdalign="left"><classname></td><tdalign="left"><classname>string</classname></td></tr><tr><tdalign="left"><function></td><tdalign="left">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/><title></title><metaname="generator"content="DocBook XSL-NS Stylesheets V1.78.1"/><metaname="keywords"content="ISO C++, library"/><metaname="keywords"content="ISO C++, runtime, library"/><linkrel="home"href="../index.html"title="The GNU C++ Library"/><linkrel="up"href="extensions.html"title="Part III. Extensions"/><linkrel="prev"href="extensions.html"title="Part III. Extensions"/><linkrel="next"href="ext_compile_checks.html"title="Chapter 16. Compile Time Checks"/></head><body><divclass="navheader"><tablewidth="100%"summary="Navigation header"><tr><thcolspan="3"align="center"></th></tr><tr><tdwidth="20%"align="left"><aaccesskey="p"href="extensions.html">Prev</a></td><thwidth="60%"align="center">Part III.
</th></tr><tr><tdwidth="20%"align="left"><aaccesskey="p"href="io_and_c.html">Prev</a></td><thwidth="60%"align="center">The GNU C++ Library Manual</th><tdwidth="20%"align="right"><aaccesskey="n"href="ext_preface.html">Next</a></td></tr></table><hr/></div><divclass="part"><divclass="titlepage"><div><div><h1class="title"><aid="manual.ext"></a>Part III.
Extensions
<aid="idm234602445088"class="indexterm"></a>
<aid="idm269890844320"class="indexterm"></a>
</h1></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="preface"><ahref="ext_preface.html"></a></span></dt><dt><spanclass="chapter"><ahref="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><spanclass="chapter"><ahref="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><spanclass="section"><ahref="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><spanclass="section"><ahref="debug_mode_semantics.html">Semantics</a></span></dt><dt><spanclass="section"><ahref="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><spanclass="section"><ahref="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><spanclass="section"><ahref="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><spanclass="section"><ahref="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><spanclass="section"><ahref="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><spanclass="section"><ahref="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><spanclass="section"><ahref="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><spanclass="section"><ahref="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><spanclass="section"><ahref="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><spanclass="section"><ahref="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><spanclass="section"><ahref="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><spanclass="section"><ahref="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
debug-mode components</a></span></dt><dt><spanclass="section"><ahref="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><spanclass="section"><ahref="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><spanclass="section"><ahref="parallel_mode_semantics.html">Semantics</a></span></dt><dt><spanclass="section"><ahref="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><spanclass="section"><ahref="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><spanclass="section"><ahref="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><spanclass="section"><ahref="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><spanclass="section"><ahref="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><spanclass="section"><ahref="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><spanclass="section"><ahref="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><spanclass="section"><ahref="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><spanclass="section"><ahref="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><spanclass="section"><ahref="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><spanclass="section"><ahref="parallel_mode_test.html">Testing</a></span></dt><dt><spanclass="bibliography"><ahref="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><spanclass="section"><ahref="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><spanclass="section"><ahref="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><spanclass="section"><ahref="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><spanclass="section"><ahref="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><spanclass="section"><ahref="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><spanclass="section"><ahref="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><spanclass="section"><ahref="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><spanclass="section"><ahref="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><spanclass="section"><ahref="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><spanclass="section"><ahref="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><spanclass="section"><ahref="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><spanclass="section"><ahref="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><spanclass="section"><ahref="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><spanclass="section"><ahref="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><spanclass="section"><ahref="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><spanclass="section"><ahref="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><spanclass="section"><ahref="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><spanclass="section"><ahref="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><spanclass="section"><ahref="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><spanclass="section"><ahref="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><spanclass="bibliography"><ahref="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><spanclass="section"><ahref="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><spanclass="section"><ahref="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><spanclass="section"><ahref="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><spanclass="section"><ahref="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><spanclass="section"><ahref="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><spanclass="section"><ahref="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><spanclass="section"><ahref="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><spanclass="section"><ahref="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.allocate"><codeclass="function">allocate</code></a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.deallocate"><codeclass="function">deallocate</code></a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><spanclass="section"><ahref="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><spanclass="section"><ahref="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><spanclass="section"><ahref="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><spanclass="section"><ahref="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><spanclass="section"><ahref="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><spanclass="section"><ahref="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><spanclass="section"><ahref="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><spanclass="section"><ahref="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><spanclass="section"><ahref="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><spanclass="section"><ahref="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><spanclass="section"><ahref="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><spanclass="section"><ahref="policy_data_structures_using.html#pbds.using.tutorial.configuring">
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><divclass="biblioentry"><aid="idm234603088032"></a><p><spanclass="citetitle"><emclass="citetitle">
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><divclass="biblioentry"><aid="idm269891510288"></a><p><spanclass="citetitle"><emclass="citetitle">
of them is overloaded: one signature for common default operations,
and a second for fully general operations. Their names are
self-explanatory to anyone who works with numerics on a regular basis:
</p><divclass="itemizedlist"><ulclass="itemizedlist"style="list-style-type: disc; "><liclass="listitem"><p><codeclass="code">accumulate</code></p></li><liclass="listitem"><p><codeclass="code">inner_product</code></p></li><liclass="listitem"><p><codeclass="code">chapterial_sum</code></p></li><liclass="listitem"><p><codeclass="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <codeclass="code">accumulate</code>.
</p><divclass="itemizedlist"><ulclass="itemizedlist"style="list-style-type: disc; "><liclass="listitem"><p><codeclass="code">accumulate</code></p></li><liclass="listitem"><p><codeclass="code">inner_product</code></p></li><liclass="listitem"><p><codeclass="code">partial_sum</code></p></li><liclass="listitem"><p><codeclass="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <codeclass="code">accumulate</code>.
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <codeclass="classname">exception</code></a></span></dt></dl></dd><dt><spanclass="section"><ahref="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="utilities.html">6.
Utilities
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="utilities.html#std.util.functors">Functors</a></span></dt><dt><spanclass="section"><ahref="pairs.html">Pairs</a></span></dt><dt><spanclass="section"><ahref="memory.html">Memory</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#allocator.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234604985488">Interface Design</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234604981936">Selecting Default Allocation Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234604968640">Disabling Memory Caching</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><spanclass="section"><ahref="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234603392608">Class Hierarchy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603370096">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603362800">Selecting Lock Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603348176">Related functions and classes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234603331760">Examples</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603328176">Unresolved Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="traits.html">Traits</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="strings.html">7.
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="utilities.html#std.util.functors">Functors</a></span></dt><dt><spanclass="section"><ahref="pairs.html">Pairs</a></span></dt><dt><spanclass="section"><ahref="memory.html">Memory</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#allocator.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891950848">Interface Design</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891947296">Selecting Default Allocation Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891934000">Disabling Memory Caching</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><spanclass="section"><ahref="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891814224">Class Hierarchy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891791712">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891784416">Selecting Lock Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891769792">Related functions and classes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891753440">Examples</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891749856">Unresolved Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="traits.html">Traits</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="strings.html">7.
Strings
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><spanclass="section"><ahref="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="localization.html">8.
Localization
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locales.locale.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.design">Design</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><spanclass="section"><ahref="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="facets.html">Facets</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#idm234603126096">Specializations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#codecvt.design.wchar_t_size"><spanclass="type">wchar_t</span> Size</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.messages.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.design">Design</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#messages.impl.models">Models</a></span></dt><dt><spanclass="section"><ahref="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.messages.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="containers.html">9.
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locales.locale.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.design">Design</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><spanclass="section"><ahref="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="facets.html">Facets</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#codecvt.design.wchar_t_size"><spanclass="type">wchar_t</span> Size</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.messages.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.design">Design</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#messages.impl.models">Models</a></span></dt><dt><spanclass="section"><ahref="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.messages.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="containers.html">9.
Containers
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><spanclass="section"><ahref="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="associative.html">Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><spanclass="section"><ahref="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><spanclass="section"><ahref="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><spanclass="section"><ahref="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.insert_hints">Insertion Hints</a></span></dt><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="iterators.html">10.
<acronymclass="acronym">GNU</acronym> General Public License version 3
</a></span></dt><dt><spanclass="appendix"><ahref="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><divclass="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <ahref="policy_data_structures.html#idm234601255184">Node Invariants</a></dt><dt>22.2. <ahref="policy_data_structures.html#idm234601248528">Underlying Associative Data Structures</a></dt><dt>22.3. <ahref="policy_data_structures.html#idm234601216896">Range Iteration in Different Data Structures</a></dt><dt>22.4. <ahref="policy_data_structures.html#idm234601202048">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <ahref="policy_data_structures.html#idm234601192784">Effect of erase in different underlying data structures</a></dt><dt>22.6. <ahref="policy_data_structures.html#idm234601125200">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <ahref="policy_data_structures_using.html#idm234601062432">Exception Hierarchy</a></dt><dt>22.8. <ahref="policy_data_structures_design.html#idm234600867728">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <ahref="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
</a></span></dt><dt><spanclass="appendix"><ahref="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><divclass="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <ahref="policy_data_structures.html#idm269889654480">Node Invariants</a></dt><dt>22.2. <ahref="policy_data_structures.html#idm269889647760">Underlying Associative Data Structures</a></dt><dt>22.3. <ahref="policy_data_structures.html#idm269889616064">Range Iteration in Different Data Structures</a></dt><dt>22.4. <ahref="policy_data_structures.html#idm269889601152">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <ahref="policy_data_structures.html#idm269889591888">Effect of erase in different underlying data structures</a></dt><dt>22.6. <ahref="policy_data_structures.html#idm269889524368">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <ahref="policy_data_structures_using.html#idm269889461728">Exception Hierarchy</a></dt><dt>22.8. <ahref="policy_data_structures_design.html#idm269889267280">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <ahref="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
Effect of embedded lists in
<codeclass="classname">std::multimap</code>
</a></dt><dt>22.10. <ahref="policy_data_structures_design.html#idm234600844224">Non-unique Mapping Containers</a></dt><dt>22.11. <ahref="policy_data_structures_design.html#idm234600824480">Point Iterator Hierarchy</a></dt><dt>22.12. <ahref="policy_data_structures_design.html#idm234600811200">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <ahref="policy_data_structures_design.html#idm234600780976">Container Tag Hierarchy</a></dt><dt>22.14. <ahref="policy_data_structures_design.html#idm234600740768">Hash functions, ranged-hash functions, and
range-hashing functions</a></dt><dt>22.15. <ahref="policy_data_structures_design.html#idm234600676384">Insert hash sequence diagram</a></dt><dt>22.16. <ahref="policy_data_structures_design.html#idm234600669328">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <ahref="policy_data_structures_design.html#idm234600652512">Hash policy class diagram</a></dt><dt>22.18. <ahref="policy_data_structures_design.html#idm234600633472">Balls and bins</a></dt><dt>22.19. <ahref="policy_data_structures_design.html#idm234600602752">Insert resize sequence diagram</a></dt><dt>22.20. <ahref="policy_data_structures_design.html#idm234600594976">Standard resize policy trigger sequence
</a></dt></dl></div></div><divclass="navfooter"><hr/><tablewidth="100%"summary="Navigation footer"><tr><tdwidth="40%"align="left"><aaccesskey="p"href="../index.html">Prev</a></td><tdwidth="20%"align="center"></td><tdwidth="40%"align="right"><aaccesskey="n"href="intro.html">Next</a></td></tr><tr><tdwidth="40%"align="left"valign="top">The GNU C++ Library </td><tdwidth="20%"align="center"><aaccesskey="h"href="../index.html">Home</a></td><tdwidth="40%"align="right"valign="top"> Part I.
</th></tr><tr><tdwidth="20%"align="left"><aaccesskey="p"href="index.html">Prev</a></td><thwidth="60%"align="center">The GNU C++ Library Manual</th><tdwidth="20%"align="right"><aaccesskey="n"href="status.html">Next</a></td></tr></table><hr/></div><divclass="part"><divclass="titlepage"><div><div><h1class="title"><aid="manual.intro"></a>Part I.
Introduction
<aid="idm234610029904"class="indexterm"></a>
<aid="idm269898634240"class="indexterm"></a>
</h1></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="chapter"><ahref="status.html">1. Status</a></span></dt><dd><dl><dt><spanclass="section"><ahref="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><spanclass="section"><ahref="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><spanclass="section"><ahref="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><spanclass="section"><ahref="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><spanclass="section"><ahref="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><spanclass="section"><ahref="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><spanclass="section"><ahref="status.html#status.iso.2014">C++ 2014</a></span></dt><dt><spanclass="section"><ahref="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><spanclass="section"><ahref="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><spanclass="section"><ahref="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><spanclass="section"><ahref="license.html">License</a></span></dt><dd><dl><dt><spanclass="section"><ahref="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><spanclass="section"><ahref="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><spanclass="section"><ahref="bugs.html">Bugs</a></span></dt><dd><dl><dt><spanclass="section"><ahref="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><spanclass="section"><ahref="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="setup.html">2. Setup</a></span></dt><dd><dl><dt><spanclass="section"><ahref="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><spanclass="section"><ahref="configure.html">Configure</a></span></dt><dt><spanclass="section"><ahref="make.html">Make</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="using.html">3. Using</a></span></dt><dd><dl><dt><spanclass="section"><ahref="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><spanclass="section"><ahref="using_headers.html">Headers</a></span></dt><dd><dl><dt><spanclass="section"><ahref="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><spanclass="section"><ahref="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><spanclass="section"><ahref="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <codeclass="code">namespace std</code></a></span></dt><dt><spanclass="section"><ahref="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="using_macros.html">Macros</a></span></dt><dt><spanclass="section"><ahref="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><spanclass="section"><ahref="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><spanclass="section"><ahref="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><spanclass="section"><ahref="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><spanclass="section"><ahref="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><spanclass="section"><ahref="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><spanclass="section"><ahref="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><spanclass="section"><ahref="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><spanclass="section"><ahref="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><spanclass="section"><ahref="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><spanclass="section"><ahref="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><spanclass="section"><ahref="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><spanclass="section"><ahref="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><spanclass="section"><ahref="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><spanclass="section"><ahref="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><spanclass="section"><ahref="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><spanclass="section"><ahref="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><spanclass="section"><ahref="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><spanclass="section"><ahref="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><spanclass="section"><ahref="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><spanclass="section"><ahref="using_exceptions.html#using.exception.compat.c">With <codeclass="literal">C</code></a></span></dt><dt><spanclass="section"><ahref="using_exceptions.html#using.exception.compat.posix">With <codeclass="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="debug.html">Debugging Support</a></span></dt><dd><dl><dt><spanclass="section"><ahref="debug.html#debug.compiler">Using <spanclass="command"><strong>g++</strong></span></a></span></dt><dt><spanclass="section"><ahref="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><spanclass="section"><ahref="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><spanclass="section"><ahref="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><spanclass="section"><ahref="debug.html#debug.gdb">Using <spanclass="command"><strong>gdb</strong></span></a></span></dt><dt><spanclass="section"><ahref="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><spanclass="section"><ahref="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><spanclass="section"><ahref="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><spanclass="section"><ahref="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><divclass="navfooter"><hr/><tablewidth="100%"summary="Navigation footer"><tr><tdwidth="40%"align="left"><aaccesskey="p"href="index.html">Prev</a></td><tdwidth="20%"align="center"><aaccesskey="u"href="index.html">Up</a></td><tdwidth="40%"align="right"><aaccesskey="n"href="status.html">Next</a></td></tr><tr><tdwidth="40%"align="left"valign="top">The GNU C++ Library Manual </td><tdwidth="20%"align="center"><aaccesskey="h"href="../index.html">Home</a></td><tdwidth="40%"align="right"valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><spanclass="section"><ahref="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><spanclass="section"><ahref="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><spanclass="section"><ahref="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><spanclass="section"><ahref="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><spanclass="section"><ahref="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><spanclass="section"><ahref="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><spanclass="section"><ahref="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><spanclass="section"><ahref="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><spanclass="section"><ahref="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><spanclass="section"><ahref="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><spanclass="section"><ahref="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
only include the headers you really need. Many people simply include
<iostream> when they don't need to -- and that can <spanclass="emphasis"><em>penalize
your runtime as well.</em></span> Here are some tips on which header to use
<codeclass="filename"><iostream></code> when they don't
need to -- and that can <spanclass="emphasis"><em>penalize your runtime as well.</em></span>
Here are some tips on which header to use
for which situations, starting with the simplest.
</p><p><spanclass="emphasis"><em><iosfwd></em></span> should be included whenever you simply
need the <spanclass="emphasis"><em>name</em></span> of an I/O-related class, such as
"ofstream" or "basic_streambuf". Like the name
implies, these are forward declarations. (A word to all you fellow
old school programmers: trying to forward declare classes like
"class istream;" won't work. Look in the iosfwd header if
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><spanclass="section"><ahref="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><spanclass="section"><ahref="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.iterators.predefined"></a>Predefined</h2></div></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
The following
FAQ <aclass="link"href="../faq.html#faq.iterator_as_pod"title="7.1.">entry</a> points out that
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locales.locale.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.design">Design</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><spanclass="section"><ahref="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="facets.html">Facets</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#idm234603126096">Specializations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#codecvt.design.wchar_t_size"><spanclass="type">wchar_t</span> Size</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.messages.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.design">Design</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#messages.impl.models">Models</a></span></dt><dt><spanclass="section"><ahref="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.messages.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.localization.locales"></a>Locales</h2></div></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
<aid="idm269891625280"class="indexterm"></a>
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locales.locale.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.design">Design</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><spanclass="section"><ahref="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="facets.html">Facets</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#codecvt.design.wchar_t_size"><spanclass="type">wchar_t</span> Size</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.messages.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.design">Design</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#messages.impl.models">Models</a></span></dt><dt><spanclass="section"><ahref="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.messages.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.localization.locales"></a>Locales</h2></div></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
Describes the basic locale object, including nested
classes id, facet, and the reference-counted implementation object,
class _Impl.
...
...
@@ -402,29 +402,29 @@ global locale" (emphasis Paolo), that is:
What should non-required facet instantiations do? If the
generic implementation is provided, then how to end-users
. </span></span></p></div><divclass="biblioentry"><aid="idm234603433712"></a><p><spanclass="citetitle"><emclass="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><spanclass="author"><spanclass="firstname">Felix</span><spanclass="surname">Yen</span>. </span></p></div></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><divclass="section"><divclass="titlepage"><div><div><h4class="title"><aid="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
. </span></span></p></div><divclass="biblioentry"><aid="idm269891855392"></a><p><spanclass="citetitle"><emclass="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><spanclass="author"><spanclass="firstname">Felix</span><spanclass="surname">Yen</span>. </span></p></div></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><divclass="section"><divclass="titlepage"><div><div><h4class="title"><aid="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
happen with misuse of the <codeclass="classname">auto_ptr</code> class
template (called <acronymclass="acronym">AP</acronym> here) would take some
time. Suffice it to say that the use of <acronymclass="acronym">AP</acronym>
...
...
@@ -445,7 +445,7 @@ drops to zero.
Derived classes override those functions to destroy resources in a context
where the correct dynamic type is known. This is an application of the
There is a single <codeclass="classname">_Sp_counted_base</code> class,
which is a template parameterized on the enum
...
...
@@ -578,7 +578,7 @@ used when libstdc++ is built without <code class="literal">--enable-threads</cod
<codeclass="filename">ext/atomicity.h</code>, which detect if the program
is multi-threaded. If only one thread of execution exists in
the program then less expensive non-atomic operations are used.
</p></div><divclass="section"><divclass="titlepage"><div><div><h5class="title"><aid="idm234603348176"></a>Related functions and classes</h5></div></div></div><divclass="variablelist"><dlclass="variablelist"><dt><spanclass="term"><codeclass="code">dynamic_pointer_cast</code>, <codeclass="code">static_pointer_cast</code>,
</p></div><divclass="section"><divclass="titlepage"><div><div><h5class="title"><aid="idm269891769792"></a>Related functions and classes</h5></div></div></div><divclass="variablelist"><dlclass="variablelist"><dt><spanclass="term"><codeclass="code">dynamic_pointer_cast</code>, <codeclass="code">static_pointer_cast</code>,
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><spanclass="section"><ahref="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><spanclass="section"><ahref="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><spanclass="section"><ahref="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><spanclass="section"><ahref="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><spanclass="section"><ahref="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.numerics.complex"></a>Complex</h2></div></div></div><p>
@@ -12,11 +12,11 @@ explicit source declaration or by compiling existing sources with a
specific compiler flag.
</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
<codeclass="filename">numeric</code> are included in the parallel mode:</p><divclass="itemizedlist"><ulclass="itemizedlist"style="list-style-type: disc; "><liclass="listitem"><p><codeclass="function">std::accumulate</code></p></li><liclass="listitem"><p><codeclass="function">std::adjacent_difference</code></p></li><liclass="listitem"><p><codeclass="function">std::inner_product</code></p></li><liclass="listitem"><p><codeclass="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
<codeclass="filename">algorithm</code> are included in the parallel mode:</p><divclass="itemizedlist"><ulclass="itemizedlist"style="list-style-type: disc; "><liclass="listitem"><p><codeclass="function">std::adjacent_find</code></p></li><liclass="listitem"><p><codeclass="function">std::count</code></p></li><liclass="listitem"><p><codeclass="function">std::count_if</code></p></li><liclass="listitem"><p><codeclass="function">std::equal</code></p></li><liclass="listitem"><p><codeclass="function">std::find</code></p></li><liclass="listitem"><p><codeclass="function">std::find_if</code></p></li><liclass="listitem"><p><codeclass="function">std::find_first_of</code></p></li><liclass="listitem"><p><codeclass="function">std::for_each</code></p></li><liclass="listitem"><p><codeclass="function">std::generate</code></p></li><liclass="listitem"><p><codeclass="function">std::generate_n</code></p></li><liclass="listitem"><p><codeclass="function">std::lexicographical_compare</code></p></li><liclass="listitem"><p><codeclass="function">std::mismatch</code></p></li><liclass="listitem"><p><codeclass="function">std::search</code></p></li><liclass="listitem"><p><codeclass="function">std::search_n</code></p></li><liclass="listitem"><p><codeclass="function">std::transform</code></p></li><liclass="listitem"><p><codeclass="function">std::replace</code></p></li><liclass="listitem"><p><codeclass="function">std::replace_if</code></p></li><liclass="listitem"><p><codeclass="function">std::max_element</code></p></li><liclass="listitem"><p><codeclass="function">std::merge</code></p></li><liclass="listitem"><p><codeclass="function">std::min_element</code></p></li><liclass="listitem"><p><codeclass="function">std::nth_element</code></p></li><liclass="listitem"><p><codeclass="function">std::partial_sort</code></p></li><liclass="listitem"><p><codeclass="function">std::partition</code></p></li><liclass="listitem"><p><codeclass="function">std::random_shuffle</code></p></li><liclass="listitem"><p><codeclass="function">std::set_union</code></p></li><liclass="listitem"><p><codeclass="function">std::set_intersection</code></p></li><liclass="listitem"><p><codeclass="function">std::set_symmetric_difference</code></p></li><liclass="listitem"><p><codeclass="function">std::set_difference</code></p></li><liclass="listitem"><p><codeclass="function">std::sort</code></p></li><liclass="listitem"><p><codeclass="function">std::stable_sort</code></p></li><liclass="listitem"><p><codeclass="function">std::unique_copy</code></p></li></ul></div></div><divclass="bibliography"><divclass="titlepage"><div><div><h2class="title"><aid="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><divclass="biblioentry"><aid="idm234601941840"></a><p><spanclass="citetitle"><emclass="citetitle">
<codeclass="filename">algorithm</code> are included in the parallel mode:</p><divclass="itemizedlist"><ulclass="itemizedlist"style="list-style-type: disc; "><liclass="listitem"><p><codeclass="function">std::adjacent_find</code></p></li><liclass="listitem"><p><codeclass="function">std::count</code></p></li><liclass="listitem"><p><codeclass="function">std::count_if</code></p></li><liclass="listitem"><p><codeclass="function">std::equal</code></p></li><liclass="listitem"><p><codeclass="function">std::find</code></p></li><liclass="listitem"><p><codeclass="function">std::find_if</code></p></li><liclass="listitem"><p><codeclass="function">std::find_first_of</code></p></li><liclass="listitem"><p><codeclass="function">std::for_each</code></p></li><liclass="listitem"><p><codeclass="function">std::generate</code></p></li><liclass="listitem"><p><codeclass="function">std::generate_n</code></p></li><liclass="listitem"><p><codeclass="function">std::lexicographical_compare</code></p></li><liclass="listitem"><p><codeclass="function">std::mismatch</code></p></li><liclass="listitem"><p><codeclass="function">std::search</code></p></li><liclass="listitem"><p><codeclass="function">std::search_n</code></p></li><liclass="listitem"><p><codeclass="function">std::transform</code></p></li><liclass="listitem"><p><codeclass="function">std::replace</code></p></li><liclass="listitem"><p><codeclass="function">std::replace_if</code></p></li><liclass="listitem"><p><codeclass="function">std::max_element</code></p></li><liclass="listitem"><p><codeclass="function">std::merge</code></p></li><liclass="listitem"><p><codeclass="function">std::min_element</code></p></li><liclass="listitem"><p><codeclass="function">std::nth_element</code></p></li><liclass="listitem"><p><codeclass="function">std::partial_sort</code></p></li><liclass="listitem"><p><codeclass="function">std::partition</code></p></li><liclass="listitem"><p><codeclass="function">std::random_shuffle</code></p></li><liclass="listitem"><p><codeclass="function">std::set_union</code></p></li><liclass="listitem"><p><codeclass="function">std::set_intersection</code></p></li><liclass="listitem"><p><codeclass="function">std::set_symmetric_difference</code></p></li><liclass="listitem"><p><codeclass="function">std::set_difference</code></p></li><liclass="listitem"><p><codeclass="function">std::sort</code></p></li><liclass="listitem"><p><codeclass="function">std::stable_sort</code></p></li><liclass="listitem"><p><codeclass="function">std::unique_copy</code></p></li></ul></div></div><divclass="bibliography"><divclass="titlepage"><div><div><h2class="title"><aid="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><divclass="biblioentry"><aid="idm269890341120"></a><p><spanclass="citetitle"><emclass="citetitle">
Parallelization of Bulk Operations for STL Dictionaries
these invariants, one must supply some policy that is aware
of these changes. Without this, it would be better to use a
linked list (in itself very efficient for these purposes).
</p></li></ol></div><divclass="figure"><aid="idm234601255184"></a><pclass="title"><strong>Figure 22.1. Node Invariants</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_node_invariants.png"align="middle"alt="Node Invariants"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h5class="title"><aid="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
</p></li></ol></div><divclass="figure"><aid="idm269889654480"></a><pclass="title"><strong>Figure 22.1. Node Invariants</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_node_invariants.png"align="middle"alt="Node Invariants"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h5class="title"><aid="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
The standard C++ library contains associative containers based on
red-black trees and collision-chaining hash tables. These are
very useful, but they are not ideal for all types of
...
...
@@ -256,7 +256,7 @@
</p><p>
The figure below shows the different underlying data structures
currently supported in this library.
</p><divclass="figure"><aid="idm234601248528"></a><pclass="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_different_underlying_dss_1.png"align="middle"alt="Underlying Associative Data Structures"/></div></div></div><brclass="figure-break"/><p>
</p><divclass="figure"><aid="idm269889647760"></a><pclass="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_different_underlying_dss_1.png"align="middle"alt="Underlying Associative Data Structures"/></div></div></div><brclass="figure-break"/><p>
A shows a collision-chaining hash-table, B shows a probing
hash-table, C shows a red-black tree, D shows a splay tree, E shows
a tree based on an ordered vector(implicit in the order of the
...
...
@@ -375,7 +375,7 @@
no guarantee that the elements traversed will coincide with the
<spanclass="emphasis"><em>logical</em></span> elements between 1 and 5, as in
label B.
</p><divclass="figure"><aid="idm234601216896"></a><pclass="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_point_iterators_range_ops_1.png"align="middle"alt="Node Invariants"/></div></div></div><brclass="figure-break"/><p>
</p><divclass="figure"><aid="idm269889616064"></a><pclass="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_point_iterators_range_ops_1.png"align="middle"alt="Node Invariants"/></div></div></div><brclass="figure-break"/><p>
In our opinion, this problem is not caused just because
red-black trees are order preserving while
collision-chaining hash tables are (generally) not - it
...
...
@@ -426,7 +426,7 @@
list, as in the graphic below, label B. Here the iterators are as
light as can be, but the hash-table's operations are more
complicated.
</p><divclass="figure"><aid="idm234601202048"></a><pclass="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_point_iterators_range_ops_2.png"align="middle"alt="Point Iteration in Hash Data Structures"/></div></div></div><brclass="figure-break"/><p>
</p><divclass="figure"><aid="idm269889601152"></a><pclass="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_point_iterators_range_ops_2.png"align="middle"alt="Point Iteration in Hash Data Structures"/></div></div></div><brclass="figure-break"/><p>
It should be noted that containers based on collision-chaining
hash-tables are not the only ones with this type of behavior;
many other self-organizing data structures display it as well.
...
...
@@ -442,7 +442,7 @@
container. The graphic below shows three cases: A1 and A2 show
a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
show a collision-chaining hash table.
</p><divclass="figure"><aid="idm234601192784"></a><pclass="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_invalidation_guarantee_erase.png"align="middle"alt="Effect of erase in different underlying data structures"/></div></div></div><brclass="figure-break"/><divclass="orderedlist"><olclass="orderedlist"type="1"><liclass="listitem"><p>
</p><divclass="figure"><aid="idm269889591888"></a><pclass="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_invalidation_guarantee_erase.png"align="middle"alt="Effect of erase in different underlying data structures"/></div></div></div><brclass="figure-break"/><divclass="orderedlist"><olclass="orderedlist"type="1"><liclass="listitem"><p>
Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
be de-referenced and incremented. The sequence of iterators
changed, but in a way that is well-defined by the interface.
...
...
@@ -678,7 +678,7 @@
typically less structured than an associative container's tree;
the third simply uses an associative container. These are
shown in the figure below with labels A1 and A2, B, and C.
</p><divclass="figure"><aid="idm234601125200"></a><pclass="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_different_underlying_dss_2.png"align="middle"alt="Underlying Priority Queue Data Structures"/></div></div></div><brclass="figure-break"/><p>
</p><divclass="figure"><aid="idm269889524368"></a><pclass="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_different_underlying_dss_2.png"align="middle"alt="Underlying Priority Queue Data Structures"/></div></div></div><brclass="figure-break"/><p>
No single implementation can completely replace any of the
others. Some have better <codeclass="function">push</code>
and <codeclass="function">pop</code> amortized performance, some have
naturally; collision-chaining hash tables (label B) store
equivalent-key values in the same bucket, the bucket can be
arranged so that equivalent-key values are consecutive.
</p><divclass="figure"><aid="idm234600867728"></a><pclass="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_embedded_lists_1.png"align="middle"alt="Non-unique Mapping Standard Containers"/></div></div></div><brclass="figure-break"/><p>
</p><divclass="figure"><aid="idm269889267280"></a><pclass="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_embedded_lists_1.png"align="middle"alt="Non-unique Mapping Standard Containers"/></div></div></div><brclass="figure-break"/><p>
Put differently, the standards' non-unique mapping
associative-containers are associative containers that map
primary keys to linked lists that are embedded into the
...
...
@@ -252,7 +252,7 @@
first graphic above. Labels A and B, respectively. Each shaded
In the first example above, then, one would use an associative
container mapping each user to an associative container which
maps each application id to a start time (see
...
...
@@ -305,7 +305,7 @@
shows invariants for order-preserving containers: point-type
iterators are synonymous with range-type iterators.
Orthogonally, <spanclass="emphasis"><em>C</em></span>shows invariants for "set"
containers: iterators are synonymous with const iterators.</p><divclass="figure"><aid="idm234600824480"></a><pclass="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_point_iterator_hierarchy.png"align="middle"alt="Point Iterator Hierarchy"/></div></div></div><brclass="figure-break"/><p>Note that point-type iterators in self-organizing containers
containers: iterators are synonymous with const iterators.</p><divclass="figure"><aid="idm269889223968"></a><pclass="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_point_iterator_hierarchy.png"align="middle"alt="Point Iterator Hierarchy"/></div></div></div><brclass="figure-break"/><p>Note that point-type iterators in self-organizing containers
(hash-based associative containers) lack movement
operators, such as <codeclass="literal">operator++</code> - in fact, this
is the reason why this library differentiates from the standard C++ librarys
...
...
@@ -344,7 +344,7 @@
to the question of whether point-type iterators and range-type
iterators are valid. The graphic below shows tags corresponding to
corresponds to a basic guarantee that a point-type iterator,
a found pointer, or a found reference, remains valid as long
...
...
@@ -428,7 +428,7 @@
</p><p>
This library contains a container tag hierarchy corresponding to the
diagram below.
</p><divclass="figure"><aid="idm234600780976"></a><pclass="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_container_tag_hierarchy.png"align="middle"alt="Container Tag Hierarchy"/></div></div></div><brclass="figure-break"/><p>
</p><divclass="figure"><aid="idm269889180448"></a><pclass="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_container_tag_hierarchy.png"align="middle"alt="Container Tag Hierarchy"/></div></div></div><brclass="figure-break"/><p>
Given any container <spanclass="type">Cntnr</span>, the tag of
the underlying data structure can be found via <codeclass="literal">typename
Cntnr::container_category</code>.
...
...
@@ -487,7 +487,7 @@
collision-chaining container, except for the following.</p><divclass="orderedlist"><olclass="orderedlist"type="1"><liclass="listitem"><p><codeclass="classname">Comb_Probe_Fn</code> describes how to transform a probe
sequence into a sequence of positions within the table.</p></li><liclass="listitem"><p><codeclass="classname">Probe_Fn</code> describes a probe sequence policy.</p></li></ol></div><p>Some of the default template values depend on the values of
other parameters, and are explained below.</p></div><divclass="section"><divclass="titlepage"><div><div><h5class="title"><aid="container.hash.details"></a>Details</h5></div></div></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.hash.details.hash_policies"></a>Hash Policies</h6></div></div></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="details.hash_policies.general"></a>General</h6></div></div></div><p>Following is an explanation of some functions which hashing
involves. The graphic below illustrates the discussion.</p><divclass="figure"><aid="idm234600740768"></a><pclass="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
involves. The graphic below illustrates the discussion.</p><divclass="figure"><aid="idm269889140368"></a><pclass="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
range-hashing functions</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_hash_ranged_hash_range_hashing_fns.png"align="middle"alt="Hash functions, ranged-hash functions, and range-hashing functions"/></div></div></div><brclass="figure-break"/><p>Let U be a domain (e.g., the integers, or the
strings of 3 characters). A hash-table algorithm needs to map
elements of U "uniformly" into the range [0,..., m -
...
...
@@ -504,7 +504,7 @@
Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
range upper-bound into a non-negative integral in the range
between 0 (inclusive) and the range upper bound (exclusive),
i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><divclass="equation"><aid="idm234600726944"></a><pclass="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><divclass="equation-contents"><spanclass="mathphrase">
i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><divclass="equation"><aid="idm269889126560"></a><pclass="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><divclass="equation-contents"><spanclass="mathphrase">
f(u , m) = g(h(u), m)
</span></div></div><brclass="equation-break"/><p>From the above, it is obvious that given g and
h, f can always be composed (however the converse
...
...
@@ -524,7 +524,7 @@
transforming the sequence of hash values into a sequence of
positions.</p></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="details.hash_policies.range"></a>Range Hashing</h6></div></div></div><p>Some common choices for range-hashing functions are the
division, multiplication, and middle-square methods (<aclass="xref"href="policy_data_structures.html#biblio.knuth98sorting"title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), defined
</span></div></div><brclass="equation-break"/><p>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</p><p>and</p><p>g(r, m) = ⌈ u/v ( r<sup>2</sup> mod v ) ⌉</p><p>respectively, for some positive integrals u and
v (typically powers of 2), and some a. Each of
...
...
@@ -535,9 +535,9 @@
implement using the low
level % (modulo) operation (for any m), or the
low level & (bit-mask) operation (for the case where
m is a power of 2), i.e.,</p><divclass="equation"><aid="idm234600716544"></a><pclass="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><divclass="equation-contents"><spanclass="mathphrase">
m is a power of 2), i.e.,</p><divclass="equation"><aid="idm269889116160"></a><pclass="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><divclass="equation-contents"><spanclass="mathphrase">
g(r, m) = r % m
</span></div></div><brclass="equation-break"/><p>and</p><divclass="equation"><aid="idm234600714720"></a><pclass="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><divclass="equation-contents"><spanclass="mathphrase">
</span></div></div><brclass="equation-break"/><p>and</p><divclass="equation"><aid="idm269889114336"></a><pclass="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><divclass="equation-contents"><spanclass="mathphrase">
g(r, m) = r & m - 1, (with m =
2<sup>k</sup> for some k)
</span></div></div><brclass="equation-break"/><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
...
...
@@ -563,7 +563,7 @@
s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
</p><p>be a string of t characters, each of which is from
of a long DNA sequence (and so S = {'A', 'C', 'G',
'T'}). In this case, scanning the entire string might be
prohibitively expensive. A possible alternative might be to use
only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><divclass="equation"><aid="idm234600698944"></a><pclass="title"><strong>Equation 22.6.
only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><divclass="equation"><aid="idm269889098560"></a><pclass="title"><strong>Equation 22.6.
hash-functor, <codeclass="classname">Hash_Fn</code> is instantiated by <codeclass="classname">null_type</code> , then <codeclass="classname">Comb_Hash_Fn</code> is taken to be
a ranged-hash function. The graphic below shows an <codeclass="function">insert</code> sequence
diagram. The user inserts an element (point A), the container
transforms the key into a position using the combining functor
(points B and C).</p><divclass="figure"><aid="idm234600669328"></a><pclass="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_hash_range_hashing_seq_diagram2.png"align="middle"alt="Insert hash sequence diagram with a null policy"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="hash_policies.implementation.probe"></a>
(points B and C).</p><divclass="figure"><aid="idm269889068880"></a><pclass="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_hash_range_hashing_seq_diagram2.png"align="middle"alt="Insert hash sequence diagram with a null policy"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="hash_policies.implementation.probe"></a>
Probing tables
</h6></div></div></div><p><codeclass="classname">gp_hash_table</code> is parametrized by
</p><divclass="figure"><aid="idm234600652512"></a><pclass="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_hash_policy_cd.png"align="middle"alt="Hash policy class diagram"/></div></div></div><brclass="figure-break"/></div></div></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
</p><divclass="figure"><aid="idm269889052112"></a><pclass="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_hash_policy_cd.png"align="middle"alt="Hash policy class diagram"/></div></div></div><brclass="figure-break"/></div></div></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
shrink. It is necessary to specify policies to determine how
and when a hash table should change its size. Usually, resize
policies can be decomposed into orthogonal policies:</p><divclass="orderedlist"><olclass="orderedlist"type="1"><liclass="listitem"><p>A size policy indicating how a hash table
...
...
@@ -667,10 +667,10 @@
and some load factor be denoted by Α. We would like to
calculate the minimal length of k, such that if there were Α
m elements in the hash table, a probe sequence of length k would
be found with probability at most 1/m.</p><divclass="figure"><aid="idm234600633472"></a><pclass="title"><strong>Figure 22.18. Balls and bins</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_balls_and_bins.png"align="middle"alt="Balls and bins"/></div></div></div><brclass="figure-break"/><p>Denote the probability that a probe sequence of length
be found with probability at most 1/m.</p><divclass="figure"><aid="idm269889033008"></a><pclass="title"><strong>Figure 22.18. Balls and bins</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_balls_and_bins.png"align="middle"alt="Balls and bins"/></div></div></div><brclass="figure-break"/><p>Denote the probability that a probe sequence of length
k appears in bin i by p<sub>i</sub>, the
length of the probe sequence of bin i by
l<sub>i</sub>, and assume uniform distribution. Then</p><divclass="equation"><aid="idm234600627968"></a><pclass="title"><strong>Equation 22.7.
l<sub>i</sub>, and assume uniform distribution. Then</p><divclass="equation"><aid="idm269889027504"></a><pclass="title"><strong>Equation 22.7.
(<aclass="xref"href="policy_data_structures.html#biblio.dubhashi98neg"title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
. Let
I(.) denote the indicator function. Then</p><divclass="equation"><aid="idm234600621200"></a><pclass="title"><strong>Equation 22.8.
I(.) denote the indicator function. Then</p><divclass="equation"><aid="idm269889020736"></a><pclass="title"><strong>Equation 22.8.
a resize is needed, and if so, what is the new size (points D
to G); following the resize, it notifies the policy that a
resize has completed (point H); finally, the element is
inserted, and the policy notified (point I).</p><divclass="figure"><aid="idm234600602752"></a><pclass="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_insert_resize_sequence_diagram1.png"align="middle"alt="Insert resize sequence diagram"/></div></div></div><brclass="figure-break"/><p>In practice, a resize policy can be usually orthogonally
inserted, and the policy notified (point I).</p><divclass="figure"><aid="idm269889002224"></a><pclass="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_insert_resize_sequence_diagram1.png"align="middle"alt="Insert resize sequence diagram"/></div></div></div><brclass="figure-break"/><p>In practice, a resize policy can be usually orthogonally
decomposed to a size policy and a trigger policy. Consequently,
the library contains a single class for instantiating a resize
both, and acts as a standard delegate (<aclass="xref"href="policy_data_structures.html#biblio.gof"title="Design Patterns - Elements of Reusable Object-Oriented Software">[biblio.gof]</a>)
to these policies.</p><p>The two graphics immediately below show sequence diagrams
illustrating the interaction between the standard resize policy
and its trigger and size policies, respectively.</p><divclass="figure"><aid="idm234600594976"></a><pclass="title"><strong>Figure 22.20. Standard resize policy trigger sequence
and its trigger and size policies, respectively.</p><divclass="figure"><aid="idm269888994448"></a><pclass="title"><strong>Figure 22.20. Standard resize policy trigger sequence
diagram</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_insert_resize_sequence_diagram3.png"align="middle"alt="Standard resize policy size sequence diagram"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="resize_policies.impl.predefined"></a>Predefined Policies</h6></div></div></div><p>The library includes the following
instantiations of size and trigger policies:</p><divclass="orderedlist"><olclass="orderedlist"type="1"><liclass="listitem"><p><codeclass="classname">hash_load_check_resize_trigger</code>
implements a load check trigger policy.</p></li><liclass="listitem"><p><codeclass="classname">cc_hash_max_collision_check_resize_trigger</code>
...
...
@@ -876,7 +876,7 @@
each node, and maintains node invariants (see <aclass="xref"href="policy_data_structures.html#biblio.clrs2001"title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.) The first stores in
each node the size of the sub-tree rooted at the node; the
second stores at each node the maximal endpoint of the
intervals at the sub-tree rooted at the node.</p><divclass="figure"><aid="idm234600512848"></a><pclass="title"><strong>Figure 22.22. Tree node invariants</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_tree_node_invariants.png"align="middle"alt="Tree node invariants"/></div></div></div><brclass="figure-break"/><p>Supporting such trees is difficult for a number of
intervals at the sub-tree rooted at the node.</p><divclass="figure"><aid="idm269888912192"></a><pclass="title"><strong>Figure 22.22. Tree node invariants</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_tree_node_invariants.png"align="middle"alt="Tree node invariants"/></div></div></div><brclass="figure-break"/><p>Supporting such trees is difficult for a number of
reasons:</p><divclass="orderedlist"><olclass="orderedlist"type="1"><liclass="listitem"><p>There must be a way to specify what a node's metadata
should be (if any).</p></li><liclass="listitem"><p>Various operations can invalidate node
invariants. The graphic below shows how a right rotation,
...
...
@@ -890,7 +890,7 @@
metadata.</p></li><liclass="listitem"><p>It is not feasible to know in advance which methods trees
can support. Besides the usual <codeclass="classname">find</code> method, the
first tree can support a <codeclass="classname">find_by_order</code> method, while
the second can support an <codeclass="classname">overlaps</code> method.</p></li></ol></div><divclass="figure"><aid="idm234600503408"></a><pclass="title"><strong>Figure 22.23. Tree node invalidation</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_tree_node_invalidations.png"align="middle"alt="Tree node invalidation"/></div></div></div><brclass="figure-break"/><p>These problems are solved by a combination of two means:
the second can support an <codeclass="classname">overlaps</code> method.</p></li></ol></div><divclass="figure"><aid="idm269888902752"></a><pclass="title"><strong>Figure 22.23. Tree node invalidation</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_tree_node_invalidations.png"align="middle"alt="Tree node invalidation"/></div></div></div><brclass="figure-break"/><p>These problems are solved by a combination of two means:
node iterators, and template-template node updater
parameters.</p><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.tree.node.iterators"></a>Node Iterators</h6></div></div></div><p>Each tree-based container defines two additional iterator
<codeclass="classname">node_update</code> class, and publicly subclasses
<codeclass="classname">node_update</code>. The graphic below shows this
scheme, as well as some predefined policies (which are explained
below).</p><divclass="figure"><aid="idm234600490240"></a><pclass="title"><strong>Figure 22.24. A tree and its update policy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_tree_node_updator_policy_cd.png"align="middle"alt="A tree and its update policy"/></div></div></div><brclass="figure-break"/><p><codeclass="classname">node_update</code> (an instantiation of
below).</p><divclass="figure"><aid="idm269888889584"></a><pclass="title"><strong>Figure 22.24. A tree and its update policy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_tree_node_updator_policy_cd.png"align="middle"alt="A tree and its update policy"/></div></div></div><brclass="figure-break"/><p><codeclass="classname">node_update</code> (an instantiation of
<codeclass="classname">Node_Update</code>) must define <codeclass="classname">metadata_type</code> as
the type of metadata it requires. For order statistics,
e.g., <codeclass="classname">metadata_type</code> might be <codeclass="classname">size_t</code>.
...
...
@@ -938,7 +938,7 @@
<codeclass="classname">nd_it</code>. For example, say node x in the
graphic below label A has an invalid invariant, but its' children,
y and z have valid invariants. After the invocation, all three
nodes should have valid invariants, as in label B.</p><divclass="figure"><aid="idm234600478576"></a><pclass="title"><strong>Figure 22.25. Restoring node invariants</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_restoring_node_invariants.png"align="middle"alt="Restoring node invariants"/></div></div></div><brclass="figure-break"/><p>When a tree operation might invalidate some node invariant,
nodes should have valid invariants, as in label B.</p><divclass="figure"><aid="idm269888877920"></a><pclass="title"><strong>Figure 22.25. Restoring node invariants</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_restoring_node_invariants.png"align="middle"alt="Restoring node invariants"/></div></div></div><brclass="figure-break"/><p>When a tree operation might invalidate some node invariant,
it invokes this method in its <codeclass="classname">node_update</code> base to
restore the invariant. For example, the graphic below shows
an <codeclass="function">insert</code> operation (point A); the tree performs some
...
...
@@ -946,7 +946,7 @@
C, and D). (It is well known that any <codeclass="function">insert</code>,
<codeclass="function">erase</code>, <codeclass="function">split</code> or <codeclass="function">join</code>, can restore
all node invariants by a small number of node invariant updates (<aclass="xref"href="policy_data_structures.html#biblio.clrs2001"title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>)
.</p><divclass="figure"><aid="idm234600470400"></a><pclass="title"><strong>Figure 22.26. Insert update sequence</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_update_seq_diagram.png"align="middle"alt="Insert update sequence"/></div></div></div><brclass="figure-break"/><p>To complete the description of the scheme, three questions
.</p><divclass="figure"><aid="idm269888869744"></a><pclass="title"><strong>Figure 22.26. Insert update sequence</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_update_seq_diagram.png"align="middle"alt="Insert update sequence"/></div></div></div><brclass="figure-break"/><p>To complete the description of the scheme, three questions
need to be answered:</p><divclass="orderedlist"><olclass="orderedlist"type="1"><liclass="listitem"><p>How can a tree which supports order statistics define a
method such as <codeclass="classname">find_by_order</code>?</p></li><liclass="listitem"><p>How can the node updater base access methods of the
tree?</p></li><liclass="listitem"><p>How can the following cyclic dependency be resolved?
...
...
@@ -988,7 +988,7 @@
node's metadata (this is halting reducible). In the graphic
below, assume the shaded node is inserted. The tree would have
to traverse the useless path shown to the root, applying
redundant updates all the way.</p></li></ol></div><divclass="figure"><aid="idm234600448144"></a><pclass="title"><strong>Figure 22.27. Useless update path</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_rationale_null_node_updator.png"align="middle"alt="Useless update path"/></div></div></div><brclass="figure-break"/><p>A null policy class, <codeclass="classname">null_node_update</code>
redundant updates all the way.</p></li></ol></div><divclass="figure"><aid="idm269888847488"></a><pclass="title"><strong>Figure 22.27. Useless update path</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_rationale_null_node_updator.png"align="middle"alt="Useless update path"/></div></div></div><brclass="figure-break"/><p>A null policy class, <codeclass="classname">null_node_update</code>
solves both these problems. The tree detects that node
invariants are irrelevant, and defines all accordingly.</p></div></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.tree.details.split"></a>Split and Join</h6></div></div></div><p>Tree-based containers support split and join methods.
It is possible to split a tree so that it passes
...
...
@@ -1071,7 +1071,7 @@
sub-tree with leafs "a" and "as". The maximal common prefix is
"a". The internal node contains, consequently, to const
iterators, one pointing to <codeclass="varname">'a'</code>, and the other to
<codeclass="varname">'s'</code>.</p><divclass="figure"><aid="idm234600403456"></a><pclass="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_pat_trie.png"align="middle"alt="A PATRICIA trie"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
<codeclass="varname">'s'</code>.</p><divclass="figure"><aid="idm269888802800"></a><pclass="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_pat_trie.png"align="middle"alt="A PATRICIA trie"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
tree-based containers. There are two minor
differences, though, which, unfortunately, thwart sharing them
sharing the same node-updating policies:</p><divclass="orderedlist"><olclass="orderedlist"type="1"><liclass="listitem"><p>A trie's <codeclass="classname">Node_Update</code> template-template
...
...
@@ -1080,7 +1080,7 @@
parametrized by <codeclass="classname">Cmp_Fn</code>.</p></li><liclass="listitem"><p>Tree-based containers store values in all nodes, while
trie-based containers (at least in this implementation) store
values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
policies (which are explained below).</p><divclass="figure"><aid="idm234600392960"></a><pclass="title"><strong>Figure 22.29. A trie and its update policy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_trie_node_updator_policy_cd.png"align="middle"alt="A trie and its update policy"/></div></div></div><brclass="figure-break"/><p>This library offers the following pre-defined trie node
policies (which are explained below).</p><divclass="figure"><aid="idm269888792304"></a><pclass="title"><strong>Figure 22.29. A trie and its update policy</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_trie_node_updator_policy_cd.png"align="middle"alt="A trie and its update policy"/></div></div></div><brclass="figure-break"/><p>This library offers the following pre-defined trie node
simple list of integer keys. If we search for the integer 6, we
are paying an overhead: the link with key 6 is only the fifth
link; if it were the first link, it could be accessed
faster.</p><divclass="figure"><aid="idm234600362320"></a><pclass="title"><strong>Figure 22.30. A simple list</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_simple_list.png"align="middle"alt="A simple list"/></div></div></div><brclass="figure-break"/><p>List-update algorithms reorder lists as elements are
faster.</p><divclass="figure"><aid="idm269888761664"></a><pclass="title"><strong>Figure 22.30. A simple list</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_simple_list.png"align="middle"alt="A simple list"/></div></div></div><brclass="figure-break"/><p>List-update algorithms reorder lists as elements are
accessed. They try to determine, by the access history, which
keys to move to the front of the list. Some of these algorithms
require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
...
...
@@ -1138,7 +1138,7 @@
predetermined value, say 10, as shown in label C, the count is set
to 0 and the node is moved to the front of the list, as in label
D.
</p><divclass="figure"><aid="idm234600356736"></a><pclass="title"><strong>Figure 22.31. The counter algorithm</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_list_update.png"align="middle"alt="The counter algorithm"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
</p><divclass="figure"><aid="idm269888756080"></a><pclass="title"><strong>Figure 22.31. The counter algorithm</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_list_update.png"align="middle"alt="The counter algorithm"/></div></div></div><brclass="figure-break"/></div><divclass="section"><divclass="titlepage"><div><div><h6class="title"><aid="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
implementing any algorithm moving nodes to the front of the
list (policies implementing algorithms interchanging nodes are
unsupported).</p><p>Associative containers based on lists are parametrized by a
...
...
@@ -1310,7 +1310,7 @@
sequence; the second uses a tree (or forest of trees), which is
typically less structured than an associative container's tree;
the third simply uses an associative container. These are
shown in the graphic below, in labels A1 and A2, label B, and label C.</p><divclass="figure"><aid="idm234600293024"></a><pclass="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_priority_queue_different_underlying_dss.png"align="middle"alt="Underlying Priority-Queue Data-Structures."/></div></div></div><brclass="figure-break"/><p>Roughly speaking, any value that is both pushed and popped
shown in the graphic below, in labels A1 and A2, label B, and label C.</p><divclass="figure"><aid="idm269888692256"></a><pclass="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_priority_queue_different_underlying_dss.png"align="middle"alt="Underlying Priority-Queue Data-Structures."/></div></div></div><brclass="figure-break"/><p>Roughly speaking, any value that is both pushed and popped
from a priority queue must incur a logarithmic expense (in the
amortized sense). Any priority queue implementation that would
avoid this, would violate known bounds on comparison-based
...
...
@@ -1390,7 +1390,7 @@
container <codeclass="classname">Cntnr</code>, the tag of the underlying
data structure can be found via <codeclass="classname">typename
Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
</p><divclass="figure"><aid="idm234600257984"></a><pclass="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_priority_queue_tag_hierarchy.png"align="middle"alt="Priority-Queue Data-Structure Tags."/></div></div></div><brclass="figure-break"/><p>Additionally, a traits mechanism can be used to query a
</p><divclass="figure"><aid="idm269888657216"></a><pclass="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><divclass="figure-contents"><divclass="mediaobject"align="center"><imgsrc="../images/pbds_priority_queue_tag_hierarchy.png"align="middle"alt="Priority-Queue Data-Structure Tags."/></div></div></div><brclass="figure-break"/><p>Additionally, a traits mechanism can be used to query a
container type for its attributes. Given any container
<codeclass="classname">Cntnr</code>, then </p><preclass="programlisting">__gnu_pbds::container_traits<Cntnr></pre><p>
is a traits class identifying the properties of the
CONTAINERS</a></td><tdalign="left"><aclass="link"href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small"title="Hashtable Too Small">
HASHTABLE_TOO_SMALL</a></td><tdalign="left">10</td><tdalign="left">1</td><tdalign="left"></td><tdalign="left">10</td><tdalign="left">yes</td></tr><tr><tdalign="left"></td><tdalign="left"><aclass="link"href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large"title="Hashtable Too Large">
</td><tdalign="left">A proposal to add a utility class to represent optional objects</td><tdalign="left">Y</td><tdalign="left">Library Fundamentals TS</td></tr><tr><tdalign="left">
</td><tdalign="left"><codeclass="code">string_view</code>: a non-owning reference to a string</td><tdalign="left">Y</td><tdalign="left">Library Fundamentals TS</td></tr><trbgcolor="#C8C8B0"><tdalign="left">
</td><tdalign="left">A proposal to add a utility class to represent optional objects</td><tdalign="left">Y</td><tdalign="left">Library Fundamentals TS</td></tr><trbgcolor="#C8B0B0"><tdalign="left">
</td><tdalign="left">Invocation type traits, but dropping function_call_operator.</td><tdalign="left">N</td><tdalign="left">Library Fundamentals TS</td></tr><trbgcolor="#C8B0B0"><tdalign="left">
<aclass="link"href=""target="_top">
N3905
</a>
</td><tdalign="left">Faster string searching (Boyer-Moore et al.)</td><tdalign="left">N</td><tdalign="left">Library Fundamentals TS</td></tr><trbgcolor="#C8B0B0"><tdalign="left">
</td><tdalign="left">apply() call a function with arguments from a tuple</td><tdalign="left">N</td><tdalign="left">Library Fundamentals TS</td></tr><trbgcolor="#C8B0B0"><tdalign="left">
</td><tdalign="left">Extending shared_ptr to support arrays</td><tdalign="left">N</td><tdalign="left">Library Fundamentals TS</td></tr><tr><tdalign="left">
</td><tdalign="left"><codeclass="code">string_view</code>: a non-owning reference to a string</td><tdalign="left">Y</td><tdalign="left">Library Fundamentals TS</td></tr><trbgcolor="#C8B0B0"><tdalign="left">
</td><tdalign="left">Variable Templates For Type Traits</td><tdalign="left">N</td><tdalign="left">Library Fundamentals TS</td></tr><trbgcolor="#C8C8B0"><tdalign="left">
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><spanclass="section"><ahref="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <codeclass="classname">exception</code></a></span></dt></dl></dd><dt><spanclass="section"><ahref="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="utilities.html">6.
Utilities
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="utilities.html#std.util.functors">Functors</a></span></dt><dt><spanclass="section"><ahref="pairs.html">Pairs</a></span></dt><dt><spanclass="section"><ahref="memory.html">Memory</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#allocator.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234604985488">Interface Design</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234604981936">Selecting Default Allocation Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234604968640">Disabling Memory Caching</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><spanclass="section"><ahref="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234603392608">Class Hierarchy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603370096">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603362800">Selecting Lock Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603348176">Related functions and classes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234603331760">Examples</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603328176">Unresolved Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="traits.html">Traits</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="strings.html">7.
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="utilities.html#std.util.functors">Functors</a></span></dt><dt><spanclass="section"><ahref="pairs.html">Pairs</a></span></dt><dt><spanclass="section"><ahref="memory.html">Memory</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#allocator.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891950848">Interface Design</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891947296">Selecting Default Allocation Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891934000">Disabling Memory Caching</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><spanclass="section"><ahref="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891814224">Class Hierarchy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891791712">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891784416">Selecting Lock Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891769792">Related functions and classes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891753440">Examples</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891749856">Unresolved Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="traits.html">Traits</a></span></dt></dl></dd><dt><spanclass="chapter"><ahref="strings.html">7.
Strings
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><spanclass="section"><ahref="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="localization.html">8.
Localization
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locales.locale.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.design">Design</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><spanclass="section"><ahref="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="facets.html">Facets</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#idm234603126096">Specializations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#codecvt.design.wchar_t_size"><spanclass="type">wchar_t</span> Size</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.messages.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.design">Design</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#messages.impl.models">Models</a></span></dt><dt><spanclass="section"><ahref="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.messages.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="containers.html">9.
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locales.locale.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.design">Design</a></span></dt><dt><spanclass="section"><ahref="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><spanclass="section"><ahref="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="facets.html">Facets</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#codecvt.design.wchar_t_size"><spanclass="type">wchar_t</span> Size</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><spanclass="section"><ahref="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#facet.messages.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.design">Design</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="facets.html#messages.impl.models">Models</a></span></dt><dt><spanclass="section"><ahref="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><spanclass="section"><ahref="facets.html#facet.messages.use">Use</a></span></dt><dt><spanclass="section"><ahref="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="containers.html">9.
Containers
</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><spanclass="section"><ahref="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="associative.html">Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><spanclass="section"><ahref="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><spanclass="section"><ahref="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><spanclass="section"><ahref="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.insert_hints">Insertion Hints</a></span></dt><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><spanclass="section"><ahref="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><spanclass="section"><ahref="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><spanclass="chapter"><ahref="iterators.html">10.
</p></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="io.streambuf.buffering"></a>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Particularly
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><spanclass="section"><ahref="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><spanclass="section"><ahref="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.strings.string"></a>String Classes</h2></div></div></div><divclass="section"><divclass="titlepage"><div><div><h3class="title"><aid="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
Here are Standard, simple, and portable ways to perform common
transformations on a <codeclass="code">string</code> instance, such as
By default, <spanclass="command"><strong>g++</strong></span> is equivalent to <spanclass="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
</p><divclass="table"><aid="idm234605855552"></a><pclass="title"><strong>Table 3.1. C++ Command Options</strong></p><divclass="table-contents"><tablesummary="C++ Command Options"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/></colgroup><thead><tr><thalign="left">Option Flags</th><thalign="left">Description</th></tr></thead><tbody><tr><tdalign="left"><codeclass="literal">-std=c++98</code></td><tdalign="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><tdalign="left"><codeclass="literal">-std=gnu++98</code></td><tdalign="left">As directly above, with GNU extensions.</td></tr><tr><tdalign="left"><codeclass="literal">-std=c++11</code></td><tdalign="left">Use the 2011 ISO C++ standard.</td></tr><tr><tdalign="left"><codeclass="literal">-std=gnu++11</code></td><tdalign="left">As directly above, with GNU extensions.</td></tr><tr><tdalign="left"><codeclass="literal">-fexceptions</code></td><tdalign="left">See <aclass="link"href="using_exceptions.html#intro.using.exception.no"title="Doing without">exception-free dialect</a></td></tr><tr><tdalign="left"><codeclass="literal">-frtti</code></td><tdalign="left">As above, but RTTI-free dialect.</td></tr><tr><tdalign="left"><codeclass="literal">-pthread</code> or <codeclass="literal">-pthreads</code></td><tdalign="left">For ISO C++11 <thread>, <future>,
</p><divclass="table"><aid="idm269894279056"></a><pclass="title"><strong>Table 3.1. C++ Command Options</strong></p><divclass="table-contents"><tablesummary="C++ Command Options"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/></colgroup><thead><tr><thalign="left">Option Flags</th><thalign="left">Description</th></tr></thead><tbody><tr><tdalign="left"><codeclass="literal">-std=c++98</code></td><tdalign="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><tdalign="left"><codeclass="literal">-std=gnu++98</code></td><tdalign="left">As directly above, with GNU extensions.</td></tr><tr><tdalign="left"><codeclass="literal">-std=c++11</code></td><tdalign="left">Use the 2011 ISO C++ standard.</td></tr><tr><tdalign="left"><codeclass="literal">-std=gnu++11</code></td><tdalign="left">As directly above, with GNU extensions.</td></tr><tr><tdalign="left"><codeclass="literal">-fexceptions</code></td><tdalign="left">See <aclass="link"href="using_exceptions.html#intro.using.exception.no"title="Doing without">exception-free dialect</a></td></tr><tr><tdalign="left"><codeclass="literal">-frtti</code></td><tdalign="left">As above, but RTTI-free dialect.</td></tr><tr><tdalign="left"><codeclass="literal">-pthread</code> or <codeclass="literal">-pthreads</code></td><tdalign="left">For ISO C++11 <thread>, <future>,
the 1998 standard as updated for 2003, and the current 2011 standard.
</p><p>
C++98/03 include files. These are available in the default compilation mode, i.e. <codeclass="code">-std=c++98</code> or <codeclass="code">-std=gnu++98</code>.
</p><divclass="table"><aid="idm234605828128"></a><pclass="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><divclass="table-contents"><tablesummary="C++ 1998 Library Headers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">algorithm</code></td><tdalign="left"><codeclass="filename">bitset</code></td><tdalign="left"><codeclass="filename">complex</code></td><tdalign="left"><codeclass="filename">deque</code></td><tdalign="left"><codeclass="filename">exception</code></td></tr><tr><tdalign="left"><codeclass="filename">fstream</code></td><tdalign="left"><codeclass="filename">functional</code></td><tdalign="left"><codeclass="filename">iomanip</code></td><tdalign="left"><codeclass="filename">ios</code></td><tdalign="left"><codeclass="filename">iosfwd</code></td></tr><tr><tdalign="left"><codeclass="filename">iostream</code></td><tdalign="left"><codeclass="filename">istream</code></td><tdalign="left"><codeclass="filename">iterator</code></td><tdalign="left"><codeclass="filename">limits</code></td><tdalign="left"><codeclass="filename">list</code></td></tr><tr><tdalign="left"><codeclass="filename">locale</code></td><tdalign="left"><codeclass="filename">map</code></td><tdalign="left"><codeclass="filename">memory</code></td><tdalign="left"><codeclass="filename">new</code></td><tdalign="left"><codeclass="filename">numeric</code></td></tr><tr><tdalign="left"><codeclass="filename">ostream</code></td><tdalign="left"><codeclass="filename">queue</code></td><tdalign="left"><codeclass="filename">set</code></td><tdalign="left"><codeclass="filename">sstream</code></td><tdalign="left"><codeclass="filename">stack</code></td></tr><tr><tdalign="left"><codeclass="filename">stdexcept</code></td><tdalign="left"><codeclass="filename">streambuf</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="filename">utility</code></td><tdalign="left"><codeclass="filename">typeinfo</code></td></tr><tr><tdalign="left"><codeclass="filename">valarray</code></td><tdalign="left"><codeclass="filename">vector</code></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td></tr></tbody></table></div></div><brclass="table-break"/><p></p><divclass="table"><aid="idm234605791648"></a><pclass="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><divclass="table-contents"><tablesummary="C++ 1998 Library Headers for C Library Facilities"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">cassert</code></td><tdalign="left"><codeclass="filename">cerrno</code></td><tdalign="left"><codeclass="filename">cctype</code></td><tdalign="left"><codeclass="filename">cfloat</code></td><tdalign="left"><codeclass="filename">ciso646</code></td></tr><tr><tdalign="left"><codeclass="filename">climits</code></td><tdalign="left"><codeclass="filename">clocale</code></td><tdalign="left"><codeclass="filename">cmath</code></td><tdalign="left"><codeclass="filename">csetjmp</code></td><tdalign="left"><codeclass="filename">csignal</code></td></tr><tr><tdalign="left"><codeclass="filename">cstdarg</code></td><tdalign="left"><codeclass="filename">cstddef</code></td><tdalign="left"><codeclass="filename">cstdio</code></td><tdalign="left"><codeclass="filename">cstdlib</code></td><tdalign="left"><codeclass="filename">cstring</code></td></tr><tr><tdalign="left"><codeclass="filename">ctime</code></td><tdalign="left"><codeclass="filename">cwchar</code></td><tdalign="left"><codeclass="filename">cwctype</code></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td></tr></tbody></table></div></div><brclass="table-break"/><p>
</p><divclass="table"><aid="idm269894251568"></a><pclass="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><divclass="table-contents"><tablesummary="C++ 1998 Library Headers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">algorithm</code></td><tdalign="left"><codeclass="filename">bitset</code></td><tdalign="left"><codeclass="filename">complex</code></td><tdalign="left"><codeclass="filename">deque</code></td><tdalign="left"><codeclass="filename">exception</code></td></tr><tr><tdalign="left"><codeclass="filename">fstream</code></td><tdalign="left"><codeclass="filename">functional</code></td><tdalign="left"><codeclass="filename">iomanip</code></td><tdalign="left"><codeclass="filename">ios</code></td><tdalign="left"><codeclass="filename">iosfwd</code></td></tr><tr><tdalign="left"><codeclass="filename">iostream</code></td><tdalign="left"><codeclass="filename">istream</code></td><tdalign="left"><codeclass="filename">iterator</code></td><tdalign="left"><codeclass="filename">limits</code></td><tdalign="left"><codeclass="filename">list</code></td></tr><tr><tdalign="left"><codeclass="filename">locale</code></td><tdalign="left"><codeclass="filename">map</code></td><tdalign="left"><codeclass="filename">memory</code></td><tdalign="left"><codeclass="filename">new</code></td><tdalign="left"><codeclass="filename">numeric</code></td></tr><tr><tdalign="left"><codeclass="filename">ostream</code></td><tdalign="left"><codeclass="filename">queue</code></td><tdalign="left"><codeclass="filename">set</code></td><tdalign="left"><codeclass="filename">sstream</code></td><tdalign="left"><codeclass="filename">stack</code></td></tr><tr><tdalign="left"><codeclass="filename">stdexcept</code></td><tdalign="left"><codeclass="filename">streambuf</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="filename">utility</code></td><tdalign="left"><codeclass="filename">typeinfo</code></td></tr><tr><tdalign="left"><codeclass="filename">valarray</code></td><tdalign="left"><codeclass="filename">vector</code></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td></tr></tbody></table></div></div><brclass="table-break"/><p></p><divclass="table"><aid="idm269894215088"></a><pclass="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><divclass="table-contents"><tablesummary="C++ 1998 Library Headers for C Library Facilities"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">cassert</code></td><tdalign="left"><codeclass="filename">cerrno</code></td><tdalign="left"><codeclass="filename">cctype</code></td><tdalign="left"><codeclass="filename">cfloat</code></td><tdalign="left"><codeclass="filename">ciso646</code></td></tr><tr><tdalign="left"><codeclass="filename">climits</code></td><tdalign="left"><codeclass="filename">clocale</code></td><tdalign="left"><codeclass="filename">cmath</code></td><tdalign="left"><codeclass="filename">csetjmp</code></td><tdalign="left"><codeclass="filename">csignal</code></td></tr><tr><tdalign="left"><codeclass="filename">cstdarg</code></td><tdalign="left"><codeclass="filename">cstddef</code></td><tdalign="left"><codeclass="filename">cstdio</code></td><tdalign="left"><codeclass="filename">cstdlib</code></td><tdalign="left"><codeclass="filename">cstring</code></td></tr><tr><tdalign="left"><codeclass="filename">ctime</code></td><tdalign="left"><codeclass="filename">cwchar</code></td><tdalign="left"><codeclass="filename">cwctype</code></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td></tr></tbody></table></div></div><brclass="table-break"/><p>
C++11 include files. These are only available in C++11 compilation
mode, i.e. <codeclass="literal">-std=c++11</code> or <codeclass="literal">-std=gnu++11</code>.
</p><p></p><divclass="table"><aid="idm234605766912"></a><pclass="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><divclass="table-contents"><tablesummary="C++ 2011 Library Headers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">algorithm</code></td><tdalign="left"><codeclass="filename">array</code></td><tdalign="left"><codeclass="filename">bitset</code></td><tdalign="left"><codeclass="filename">chrono</code></td><tdalign="left"><codeclass="filename">complex</code></td></tr><tr><tdalign="left"><codeclass="filename">condition_variable</code></td><tdalign="left"><codeclass="filename">deque</code></td><tdalign="left"><codeclass="filename">exception</code></td><tdalign="left"><codeclass="filename">forward_list</code></td><tdalign="left"><codeclass="filename">fstream</code></td></tr><tr><tdalign="left"><codeclass="filename">functional</code></td><tdalign="left"><codeclass="filename">future</code></td><tdalign="left"><codeclass="filename">initalizer_list</code></td><tdalign="left"><codeclass="filename">iomanip</code></td><tdalign="left"><codeclass="filename">ios</code></td></tr><tr><tdalign="left"><codeclass="filename">iosfwd</code></td><tdalign="left"><codeclass="filename">iostream</code></td><tdalign="left"><codeclass="filename">istream</code></td><tdalign="left"><codeclass="filename">iterator</code></td><tdalign="left"><codeclass="filename">limits</code></td></tr><tr><tdalign="left"><codeclass="filename">list</code></td><tdalign="left"><codeclass="filename">locale</code></td><tdalign="left"><codeclass="filename">map</code></td><tdalign="left"><codeclass="filename">memory</code></td><tdalign="left"><codeclass="filename">mutex</code></td></tr><tr><tdalign="left"><codeclass="filename">new</code></td><tdalign="left"><codeclass="filename">numeric</code></td><tdalign="left"><codeclass="filename">ostream</code></td><tdalign="left"><codeclass="filename">queue</code></td><tdalign="left"><codeclass="filename">random</code></td></tr><tr><tdalign="left"><codeclass="filename">ratio</code></td><tdalign="left"><codeclass="filename">regex</code></td><tdalign="left"><codeclass="filename">set</code></td><tdalign="left"><codeclass="filename">sstream</code></td><tdalign="left"><codeclass="filename">stack</code></td></tr><tr><tdalign="left"><codeclass="filename">stdexcept</code></td><tdalign="left"><codeclass="filename">streambuf</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="filename">system_error</code></td><tdalign="left"><codeclass="filename">thread</code></td></tr><tr><tdalign="left"><codeclass="filename">tuple</code></td><tdalign="left"><codeclass="filename">type_traits</code></td><tdalign="left"><codeclass="filename">typeinfo</code></td><tdalign="left"><codeclass="filename">unordered_map</code></td><tdalign="left"><codeclass="filename">unordered_set</code></td></tr><tr><tdalign="left"><codeclass="filename">utility</code></td><tdalign="left"><codeclass="filename">valarray</code></td><tdalign="left"><codeclass="filename">vector</code></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td></tr></tbody></table></div></div><brclass="table-break"/><p></p><divclass="table"><aid="idm234605715472"></a><pclass="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><divclass="table-contents"><tablesummary="C++ 2011 Library Headers for C Library Facilities"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">cassert</code></td><tdalign="left"><codeclass="filename">ccomplex</code></td><tdalign="left"><codeclass="filename">cctype</code></td><tdalign="left"><codeclass="filename">cerrno</code></td><tdalign="left"><codeclass="filename">cfenv</code></td></tr><tr><tdalign="left"><codeclass="filename">cfloat</code></td><tdalign="left"><codeclass="filename">cinttypes</code></td><tdalign="left"><codeclass="filename">ciso646</code></td><tdalign="left"><codeclass="filename">climits</code></td><tdalign="left"><codeclass="filename">clocale</code></td></tr><tr><tdalign="left"><codeclass="filename">cmath</code></td><tdalign="left"><codeclass="filename">csetjmp</code></td><tdalign="left"><codeclass="filename">csignal</code></td><tdalign="left"><codeclass="filename">cstdarg</code></td><tdalign="left"><codeclass="filename">cstdbool</code></td></tr><tr><tdalign="left"><codeclass="filename">cstddef</code></td><tdalign="left"><codeclass="filename">cstdint</code></td><tdalign="left"><codeclass="filename">cstdlib</code></td><tdalign="left"><codeclass="filename">cstdio</code></td><tdalign="left"><codeclass="filename">cstring</code></td></tr><tr><tdalign="left"><codeclass="filename">ctgmath</code></td><tdalign="left"><codeclass="filename">ctime</code></td><tdalign="left"><codeclass="filename">cuchar</code></td><tdalign="left"><codeclass="filename">cwchar</code></td><tdalign="left"><codeclass="filename">cwctype</code></td></tr></tbody></table></div></div><brclass="table-break"/><p>
</p><p></p><divclass="table"><aid="idm269894190352"></a><pclass="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><divclass="table-contents"><tablesummary="C++ 2011 Library Headers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">algorithm</code></td><tdalign="left"><codeclass="filename">array</code></td><tdalign="left"><codeclass="filename">bitset</code></td><tdalign="left"><codeclass="filename">chrono</code></td><tdalign="left"><codeclass="filename">complex</code></td></tr><tr><tdalign="left"><codeclass="filename">condition_variable</code></td><tdalign="left"><codeclass="filename">deque</code></td><tdalign="left"><codeclass="filename">exception</code></td><tdalign="left"><codeclass="filename">forward_list</code></td><tdalign="left"><codeclass="filename">fstream</code></td></tr><tr><tdalign="left"><codeclass="filename">functional</code></td><tdalign="left"><codeclass="filename">future</code></td><tdalign="left"><codeclass="filename">initalizer_list</code></td><tdalign="left"><codeclass="filename">iomanip</code></td><tdalign="left"><codeclass="filename">ios</code></td></tr><tr><tdalign="left"><codeclass="filename">iosfwd</code></td><tdalign="left"><codeclass="filename">iostream</code></td><tdalign="left"><codeclass="filename">istream</code></td><tdalign="left"><codeclass="filename">iterator</code></td><tdalign="left"><codeclass="filename">limits</code></td></tr><tr><tdalign="left"><codeclass="filename">list</code></td><tdalign="left"><codeclass="filename">locale</code></td><tdalign="left"><codeclass="filename">map</code></td><tdalign="left"><codeclass="filename">memory</code></td><tdalign="left"><codeclass="filename">mutex</code></td></tr><tr><tdalign="left"><codeclass="filename">new</code></td><tdalign="left"><codeclass="filename">numeric</code></td><tdalign="left"><codeclass="filename">ostream</code></td><tdalign="left"><codeclass="filename">queue</code></td><tdalign="left"><codeclass="filename">random</code></td></tr><tr><tdalign="left"><codeclass="filename">ratio</code></td><tdalign="left"><codeclass="filename">regex</code></td><tdalign="left"><codeclass="filename">set</code></td><tdalign="left"><codeclass="filename">sstream</code></td><tdalign="left"><codeclass="filename">stack</code></td></tr><tr><tdalign="left"><codeclass="filename">stdexcept</code></td><tdalign="left"><codeclass="filename">streambuf</code></td><tdalign="left"><codeclass="filename">string</code></td><tdalign="left"><codeclass="filename">system_error</code></td><tdalign="left"><codeclass="filename">thread</code></td></tr><tr><tdalign="left"><codeclass="filename">tuple</code></td><tdalign="left"><codeclass="filename">type_traits</code></td><tdalign="left"><codeclass="filename">typeinfo</code></td><tdalign="left"><codeclass="filename">unordered_map</code></td><tdalign="left"><codeclass="filename">unordered_set</code></td></tr><tr><tdalign="left"><codeclass="filename">utility</code></td><tdalign="left"><codeclass="filename">valarray</code></td><tdalign="left"><codeclass="filename">vector</code></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td></tr></tbody></table></div></div><brclass="table-break"/><p></p><divclass="table"><aid="idm269894138912"></a><pclass="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><divclass="table-contents"><tablesummary="C++ 2011 Library Headers for C Library Facilities"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">cassert</code></td><tdalign="left"><codeclass="filename">ccomplex</code></td><tdalign="left"><codeclass="filename">cctype</code></td><tdalign="left"><codeclass="filename">cerrno</code></td><tdalign="left"><codeclass="filename">cfenv</code></td></tr><tr><tdalign="left"><codeclass="filename">cfloat</code></td><tdalign="left"><codeclass="filename">cinttypes</code></td><tdalign="left"><codeclass="filename">ciso646</code></td><tdalign="left"><codeclass="filename">climits</code></td><tdalign="left"><codeclass="filename">clocale</code></td></tr><tr><tdalign="left"><codeclass="filename">cmath</code></td><tdalign="left"><codeclass="filename">csetjmp</code></td><tdalign="left"><codeclass="filename">csignal</code></td><tdalign="left"><codeclass="filename">cstdarg</code></td><tdalign="left"><codeclass="filename">cstdbool</code></td></tr><tr><tdalign="left"><codeclass="filename">cstddef</code></td><tdalign="left"><codeclass="filename">cstdint</code></td><tdalign="left"><codeclass="filename">cstdlib</code></td><tdalign="left"><codeclass="filename">cstdio</code></td><tdalign="left"><codeclass="filename">cstring</code></td></tr><tr><tdalign="left"><codeclass="filename">ctgmath</code></td><tdalign="left"><codeclass="filename">ctime</code></td><tdalign="left"><codeclass="filename">cuchar</code></td><tdalign="left"><codeclass="filename">cwchar</code></td><tdalign="left"><codeclass="filename">cwctype</code></td></tr></tbody></table></div></div><brclass="table-break"/><p>
In addition, TR1 includes as:
</p><divclass="table"><aid="idm234605685584"></a><pclass="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><divclass="table-contents"><tablesummary="C++ TR 1 Library Headers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">tr1/array</code></td><tdalign="left"><codeclass="filename">tr1/complex</code></td><tdalign="left"><codeclass="filename">tr1/memory</code></td><tdalign="left"><codeclass="filename">tr1/functional</code></td><tdalign="left"><codeclass="filename">tr1/random</code></td></tr><tr><tdalign="left"><codeclass="filename">tr1/regex</code></td><tdalign="left"><codeclass="filename">tr1/tuple</code></td><tdalign="left"><codeclass="filename">tr1/type_traits</code></td><tdalign="left"><codeclass="filename">tr1/unordered_map</code></td><tdalign="left"><codeclass="filename">tr1/unordered_set</code></td></tr><tr><tdalign="left"><codeclass="filename">tr1/utility</code></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td></tr></tbody></table></div></div><brclass="table-break"/><p></p><divclass="table"><aid="idm234605668656"></a><pclass="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><divclass="table-contents"><tablesummary="C++ TR 1 Library Headers for C Library Facilities"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">tr1/ccomplex</code></td><tdalign="left"><codeclass="filename">tr1/cfenv</code></td><tdalign="left"><codeclass="filename">tr1/cfloat</code></td><tdalign="left"><codeclass="filename">tr1/cmath</code></td><tdalign="left"><codeclass="filename">tr1/cinttypes</code></td></tr><tr><tdalign="left"><codeclass="filename">tr1/climits</code></td><tdalign="left"><codeclass="filename">tr1/cstdarg</code></td><tdalign="left"><codeclass="filename">tr1/cstdbool</code></td><tdalign="left"><codeclass="filename">tr1/cstdint</code></td><tdalign="left"><codeclass="filename">tr1/cstdio</code></td></tr><tr><tdalign="left"><codeclass="filename">tr1/cstdlib</code></td><tdalign="left"><codeclass="filename">tr1/ctgmath</code></td><tdalign="left"><codeclass="filename">tr1/ctime</code></td><tdalign="left"><codeclass="filename">tr1/cwchar</code></td><tdalign="left"><codeclass="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><brclass="table-break"/><p>Decimal floating-point arithmetic is available if the C++
</p><divclass="table"><aid="idm269894109024"></a><pclass="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><divclass="table-contents"><tablesummary="C++ TR 1 Library Headers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">tr1/array</code></td><tdalign="left"><codeclass="filename">tr1/complex</code></td><tdalign="left"><codeclass="filename">tr1/memory</code></td><tdalign="left"><codeclass="filename">tr1/functional</code></td><tdalign="left"><codeclass="filename">tr1/random</code></td></tr><tr><tdalign="left"><codeclass="filename">tr1/regex</code></td><tdalign="left"><codeclass="filename">tr1/tuple</code></td><tdalign="left"><codeclass="filename">tr1/type_traits</code></td><tdalign="left"><codeclass="filename">tr1/unordered_map</code></td><tdalign="left"><codeclass="filename">tr1/unordered_set</code></td></tr><tr><tdalign="left"><codeclass="filename">tr1/utility</code></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td><tdclass="auto-generated"></td></tr></tbody></table></div></div><brclass="table-break"/><p></p><divclass="table"><aid="idm269894092096"></a><pclass="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><divclass="table-contents"><tablesummary="C++ TR 1 Library Headers for C Library Facilities"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/><colalign="left"class="c3"/><colalign="left"class="c4"/><colalign="left"class="c5"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">tr1/ccomplex</code></td><tdalign="left"><codeclass="filename">tr1/cfenv</code></td><tdalign="left"><codeclass="filename">tr1/cfloat</code></td><tdalign="left"><codeclass="filename">tr1/cmath</code></td><tdalign="left"><codeclass="filename">tr1/cinttypes</code></td></tr><tr><tdalign="left"><codeclass="filename">tr1/climits</code></td><tdalign="left"><codeclass="filename">tr1/cstdarg</code></td><tdalign="left"><codeclass="filename">tr1/cstdbool</code></td><tdalign="left"><codeclass="filename">tr1/cstdint</code></td><tdalign="left"><codeclass="filename">tr1/cstdio</code></td></tr><tr><tdalign="left"><codeclass="filename">tr1/cstdlib</code></td><tdalign="left"><codeclass="filename">tr1/ctgmath</code></td><tdalign="left"><codeclass="filename">tr1/ctime</code></td><tdalign="left"><codeclass="filename">tr1/cwchar</code></td><tdalign="left"><codeclass="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><brclass="table-break"/><p>Decimal floating-point arithmetic is available if the C++
compiler supports scalar decimal floating-point types defined via
Also included are files for the C++ ABI interface:
</p><divclass="table"><aid="idm234605642064"></a><pclass="title"><strong>Table 3.9. C++ ABI Headers</strong></p><divclass="table-contents"><tablesummary="C++ ABI Headers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">cxxabi.h</code></td><tdalign="left"><codeclass="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><brclass="table-break"/><p>
</p><divclass="table"><aid="idm269894065504"></a><pclass="title"><strong>Table 3.9. C++ ABI Headers</strong></p><divclass="table-contents"><tablesummary="C++ ABI Headers"border="1"><colgroup><colalign="left"class="c1"/><colalign="left"class="c2"/></colgroup><tbody><tr><tdalign="left"><codeclass="filename">cxxabi.h</code></td><tdalign="left"><codeclass="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><brclass="table-break"/><p>
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="utilities.html#std.util.functors">Functors</a></span></dt><dt><spanclass="section"><ahref="pairs.html">Pairs</a></span></dt><dt><spanclass="section"><ahref="memory.html">Memory</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#allocator.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234604985488">Interface Design</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234604981936">Selecting Default Allocation Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234604968640">Disabling Memory Caching</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><spanclass="section"><ahref="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234603392608">Class Hierarchy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603370096">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603362800">Selecting Lock Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603348176">Related functions and classes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm234603331760">Examples</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm234603328176">Unresolved Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="traits.html">Traits</a></span></dt></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
<aid="idm269892009344"class="indexterm"></a>
</h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="utilities.html#std.util.functors">Functors</a></span></dt><dt><spanclass="section"><ahref="pairs.html">Pairs</a></span></dt><dt><spanclass="section"><ahref="memory.html">Memory</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#allocator.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891950848">Interface Design</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891947296">Selecting Default Allocation Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891934000">Disabling Memory Caching</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><spanclass="section"><ahref="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><spanclass="section"><ahref="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><spanclass="section"><ahref="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891814224">Class Hierarchy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891791712">Thread Safety</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891784416">Selecting Lock Policy</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891769792">Related functions and classes</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><spanclass="section"><ahref="memory.html#idm269891753440">Examples</a></span></dt><dt><spanclass="section"><ahref="memory.html#idm269891749856">Unresolved Issues</a></span></dt></dl></dd><dt><spanclass="section"><ahref="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><spanclass="section"><ahref="traits.html">Traits</a></span></dt></dl></div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><aid="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
get slightly the wrong idea. In the interest of not reinventing
the wheel, we will refer you to the introduction to the functor