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

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

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

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

<HTML>
<HEAD>
<TITLE>&lt;valarray&gt;</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="utility-h.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="valarray.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library Reference Guide</B></DIV>
<H2>&lt;valarray&gt;</H2>
<P><B>Library:</B>&nbsp;&nbsp;<A HREF="2-10.html">Numerics</A></P>

<PRE><HR><B><I>Header</I></B><HR></PRE>

<UL>
<LI><A HREF="#sec1">Local Index</A></LI>
<LI><A HREF="#sec2">Summary</A></LI>
<LI><A HREF="#sec3">Synopsis</A></LI>
<LI><A HREF="#sec4">See Also</A></LI>
<LI><A HREF="#sec5">Standards Conformance</A></LI>
</UL>
<A NAME="sec1"><H3>Local Index</H3></A>
No Entries
<A NAME="sec2"><H3>Summary</H3></A>
<P>The header <SAMP>&lt;valarray&gt;</SAMP> is part of the Numerics library of the Standard C++  Library. It defines:</P>
<UL>
<LI><P CLASS="LIST">the class template <B><I>valararry</I></B> and four related class templates: <B><I><A HREF="slice-array.html">slice_array</A></I></B>, <B><I><A HREF="gslice-array.html">gslice_array</A></I></B>, <B><I><A HREF="mask-array.html">mask_array</A></I></B>, and <B><I><A HREF="indirect-array.html">indirect_array</A></I></B></P></LI>
<LI><P CLASS="LIST">two classes: <B><I><A HREF="slice.html">slice</A></I></B> and <B><I><A HREF="gslice.html">gslice</A></I></B></P></LI>
<LI><P CLASS="LIST">several functions for manipulating and comparing arrays of values</P></LI>
</UL>
<A NAME="sec3"><H3>Synopsis</H3></A>

<PRE>namespace std {
  template&lt;class T&gt; class <SAMP><A HREF="valarray.html">valarray</A></SAMP>;
  class slice;
  template&lt;class T&gt; class <SAMP><A HREF="slice-array.html">slice_array</A></SAMP>;
  class gslice;
  template&lt;class T&gt; class <SAMP><A HREF="gslice-array.html">gslice_array</A></SAMP>;
  template&lt;class T&gt; class <SAMP><A HREF="mask-array.html">mask_array</A></SAMP>;
  template&lt;class T&gt; class <SAMP><A HREF="indirect-array.html">indirect_array</A></SAMP>;

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator*(const valarray&lt;T&gt;&amp;,
                        const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator*(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator*(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator/(const valarray&lt;T&gt;&amp;,
                        const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator/(const valarray&lt;T&gt;&amp; const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator/(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator%(const valarray&lt;T&gt;&amp;,
                        const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator%(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator%(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator+(const valarray&lt;T&gt;&amp;,
                        const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator+(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator+(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator-(const valarray&lt;T&gt;&amp;,
                        const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator-(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator-(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator^(const valarray&lt;T&gt;&amp;,
                        const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator^(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator^(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator&amp;(const valarray&lt;T&gt;&amp;, 
                        const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator&amp;(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt;
  valarray&lt;T&gt; operator&amp;(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator|(const valarray&lt;T&gt;&amp;, 
                        const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator|(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator|(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator&lt;&lt;(const valarray&lt;T&gt;&amp;, 
                         const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator&lt;&lt;(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator&lt;&lt;(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; operator&gt;&gt;(const valarray&lt;T&gt;&amp;, 
                         const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator&gt;&gt;(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; operator&gt;&gt;(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&amp;&amp;(const valarray&lt;T&gt;&amp;, 
                            const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&amp;&amp;(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&amp;&amp;(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator||(const valarray&lt;T&gt;&amp;, 
                            const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator||(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator||(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt;
  valarray&lt;bool&gt; operator==(const valarray&lt;T&gt;&amp;, 
                            const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator==(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator==(const T&amp;, const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt;
  valarray&lt;bool&gt; operator!=(const valarray&lt;T&gt;&amp;, 
                            const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator!=(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator!=(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt;
  valarray&lt;bool&gt; operator&lt;(const valarray&lt;T&gt;&amp;, 
                           const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&lt;(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&lt;(const T&amp;, const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&gt;(const valarray&lt;T&gt;&amp;,
                           const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&gt;(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&gt;(const T&amp;, const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&lt;=(const valarray&lt;T&gt;&amp;, 
                            const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&lt;=(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&lt;=(const T&amp;, const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt;
  valarray&lt;bool&gt; operator&gt;=(const valarray&lt;T&gt;&amp;, 
                            const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;bool&gt; operator&gt;=(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt;  
  valarray&lt;bool&gt; operator&gt;=(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; valarray&lt;T&gt; abs  (const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; acos (const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; asin (const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; atan (const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; atan2(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; atan2(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; atan2(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; valarray&lt;T&gt; cos(const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; cosh(const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; exp(const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; log(const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; log10(const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; 
  valarray&lt;T&gt; pow(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; pow(const valarray&lt;T&gt;&amp;, const T&amp;);
  template&lt;class T&gt; 
  valarray&lt;T&gt; pow(const T&amp;, const valarray&lt;T&gt;&amp;);

  template&lt;class T&gt; valarray&lt;T&gt; sin(const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; sinh(const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; sqrt(const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; tan(const valarray&lt;T&gt;&amp;);
  template&lt;class T&gt; valarray&lt;T&gt; tanh(const valarray&lt;T&gt;&amp;);
}
</PRE>
<A NAME="sec4"><H3>See Also</H3></A>
<P><B><I><A HREF="valarray.html">valarray</A></I></B>, <B><I><A HREF="slice.html">slice</A></I></B>, <B><I><A HREF="gslice.html">gslice</A></I></B>, <B><I><A HREF="gslice-array.html">gslice_array</A></I></B>, <B><I><A HREF="mask-array.html">mask_array</A></I></B>, <B><I><A HREF="indirect-array.html">indirect_array</A></I></B></P>
<A NAME="sec5"><H3>Standards Conformance</H3></A>
<P><I>ISO/IEC 14882:1998 -- International Standard for Information Systems --Programming Language C++, Section 26.3.1</I></P>

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

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

</BODY>
</HTML>
