| <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" | |
| xml:id="std.util" xreflabel="Utilities"> | |
| <?dbhtml filename="utilities.html"?> | |
| <info><title> | |
| Utilities | |
| <indexterm><primary>Utilities</primary></indexterm> | |
| </title> | |
| <keywordset> | |
| <keyword>ISO C++</keyword> | |
| <keyword>library</keyword> | |
| </keywordset> | |
| </info> | |
| <!-- Section 01 : Functors --> | |
| <section xml:id="std.util.functors" xreflabel="Functors"><info><title>Functors</title></info> | |
| <?dbhtml filename="functors.html"?> | |
| <para>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 | |
| concept written by SGI as part of their STL, in | |
| <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html">their | |
| https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html</link>. | |
| </para> | |
| </section> | |
| <!-- Section 02 : Pairs --> | |
| <section xml:id="std.util.pairs" xreflabel="Pairs"><info><title>Pairs</title></info> | |
| <?dbhtml filename="pairs.html"?> | |
| <para>The <code>pair<T1,T2></code> is a simple and handy way to | |
| carry around a pair of objects. One is of type T1, and another of | |
| type T2; they may be the same type, but you don't get anything | |
| extra if they are. The two members can be accessed directly, as | |
| <code>.first</code> and <code>.second</code>. | |
| </para> | |
| <para>Construction is simple. The default ctor initializes each member | |
| with its respective default ctor. The other simple ctor, | |
| </para> | |
| <programlisting> | |
| pair (const T1& x, const T2& y); | |
| </programlisting> | |
| <para>does what you think it does, <code>first</code> getting <code>x</code> | |
| and <code>second</code> getting <code>y</code>. | |
| </para> | |
| <para>There is a constructor template for copying pairs of other types: | |
| </para> | |
| <programlisting> | |
| template <class U, class V> pair (const pair<U,V>& p); | |
| </programlisting> | |
| <para>The compiler will convert as necessary from U to T1 and from | |
| V to T2 in order to perform the respective initializations. | |
| </para> | |
| <para>The comparison operators are done for you. Equality | |
| of two <code>pair<T1,T2></code>s is defined as both <code>first</code> | |
| members comparing equal and both <code>second</code> members comparing | |
| equal; this simply delegates responsibility to the respective | |
| <code>operator==</code> functions (for types like MyClass) or builtin | |
| comparisons (for types like int, char, etc). | |
| </para> | |
| <para> | |
| The less-than operator is a bit odd the first time you see it. It | |
| is defined as evaluating to: | |
| </para> | |
| <programlisting> | |
| x.first < y.first || | |
| ( !(y.first < x.first) && x.second < y.second ) | |
| </programlisting> | |
| <para>The other operators are not defined using the <code>rel_ops</code> | |
| functions above, but their semantics are the same. | |
| </para> | |
| <para>Finally, there is a template function called <function>make_pair</function> | |
| that takes two references-to-const objects and returns an | |
| instance of a pair instantiated on their respective types: | |
| </para> | |
| <programlisting> | |
| pair<int,MyClass> p = make_pair(4,myobject); | |
| </programlisting> | |
| </section> | |
| <!-- Section 03 : Memory --> | |
| <section xml:id="std.util.memory" xreflabel="Memory"><info><title>Memory</title></info> | |
| <?dbhtml filename="memory.html"?> | |
| <para> | |
| Memory contains three general areas. First, function and operator | |
| calls via <function>new</function> and <function>delete</function> | |
| operator or member function calls. Second, allocation via | |
| <classname>allocator</classname>. And finally, smart pointer and | |
| intelligent pointer abstractions. | |
| </para> | |
| <!-- Section 01 : allocator --> | |
| <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="allocator.xml"> | |
| </xi:include> | |
| <!-- Section 02 : auto_ptr --> | |
| <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="auto_ptr.xml"> | |
| </xi:include> | |
| <!-- Section 03 : shared_ptr --> | |
| <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="shared_ptr.xml"> | |
| </xi:include> | |
| </section> | |
| <!-- Section 04 : Traits --> | |
| <section xml:id="std.util.traits" xreflabel="Traits"><info><title>Traits</title></info> | |
| <?dbhtml filename="traits.html"?> | |
| <para> | |
| </para> | |
| </section> | |
| </chapter> |