mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			120 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			XML
		
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			XML
		
	
	
	
<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="http://www.sgi.com/tech/stl/functors.html">their
 | 
						|
      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>
 |