| <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/20171225062613/http://www.sgi.com/tech/stl/functors.html">their |
| https://web.archive.org/web/20171225062613/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> |