blob: 29c8e04d43713cf37a2be0402194feaa329ea1d2 [file] [log] [blame]
<!--
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>valarray</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="valarray-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="vector-h.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>valarray</H2>
<P><B>Library:</B>&nbsp;&nbsp;<A HREF="2-10.html">Numerics</A></P>
<PRE><HR><B><I>Does not inherit</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">Description</A></LI>
<LI><A HREF="#sec5">Interface</A></LI>
<LI><A HREF="#sec6">Constructors</A></LI>
<LI><A HREF="#sec7">Destructor</A></LI>
<LI><A HREF="#sec8">Assignment Operators</A></LI>
<LI><A HREF="#sec9">Element Access Operators</A></LI>
<LI><A HREF="#sec10">Subset Operators</A></LI>
<LI><A HREF="#sec11">Unary Operators</A></LI>
<LI><A HREF="#sec12">Computed Assignment Operators</A></LI>
<LI><A HREF="#sec13">Member Functions</A></LI>
<LI><A HREF="#sec14">Nonmember Binary Operators</A></LI>
<LI><A HREF="#sec15">Nonmember Logical Operators</A></LI>
<LI><A HREF="#sec16">Nonmember Transcen-dental Functions</A></LI>
<LI><A HREF="#sec17">Example</A></LI>
<LI><A HREF="#sec18">See Also</A></LI>
<LI><A HREF="#sec19">Standards Conformance</A></LI>
</UL>
<A NAME="sec1"><H3>Local Index</H3></A>
<H4>Members</H4>
<UL><TABLE CELLPADDING=3>
<TR><TD VALIGN=top>
<A HREF="#idx1292">apply()</A><BR>
<A HREF="#idx1291">cshift()</A><BR>
<A HREF="#idx1289">max()</A><BR>
<A HREF="#idx1288">min()</A><BR>
<A HREF="#idx1283">operator!()</A><BR>
<A HREF="#idx1284">operator%=()</A><BR>
<A HREF="#idx1284">operator&amp;=()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx1284">operator&gt;&gt;=()</A><BR>
<A HREF="#idx1284">operator&lt;&lt;=()</A><BR>
<A HREF="#idx1284">operator*=()</A><BR>
<A HREF="#idx1280">operator+()</A><BR>
<A HREF="#idx1284">operator+=()</A><BR>
<A HREF="#idx1281">operator-()</A><BR>
<A HREF="#idx1284">operator-=()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx1284">operator/=()</A><BR>
<A HREF="#idx1264">operator=()</A><BR>
<A HREF="#idx1270">operator[]()</A><BR>
<A HREF="#idx1284">operator^=()</A><BR>
<A HREF="#idx1285">operator^=()</A><BR>
<A HREF="#idx1284">operator|=()</A><BR>
<A HREF="#idx1282">operator~()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx1294">resize()</A><BR>
<A HREF="#idx1290">shift()</A><BR>
<A HREF="#idx1286">size()</A><BR>
<A HREF="#idx1287">sum()</A><BR>
<A HREF="#idx1254">valarray()</A><BR>
<A HREF="#idx1263">~valarray()</A><BR>
</TD></TR>
</TABLE></UL>
<H4>Non-Members</H4>
<UL><TABLE CELLPADDING=3>
<TR><TD VALIGN=top>
<A HREF="#idx1301">abs()</A><BR>
<A HREF="#idx1301">acos()</A><BR>
<A HREF="#idx1301">asin()</A><BR>
<A HREF="#idx1301">atan()</A><BR>
<A HREF="#idx1302">atan2()</A><BR>
<A HREF="#idx1301">cos()</A><BR>
<A HREF="#idx1301">cosh()</A><BR>
<A HREF="#idx1301">exp()</A><BR>
<A HREF="#idx1301">log()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx1301">log10()</A><BR>
<A HREF="#idx1298">operator!=()</A><BR>
<A HREF="#idx1295">operator%()</A><BR>
<A HREF="#idx1298">operator&amp;&amp;()</A><BR>
<A HREF="#idx1295">operator&amp;()</A><BR>
<A HREF="#idx1295">operator&gt;&gt;()</A><BR>
<A HREF="#idx1298">operator&gt;()</A><BR>
<A HREF="#idx1298">operator&gt;=()</A><BR>
<A HREF="#idx1295">operator&lt;&lt;()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx1298">operator&lt;()</A><BR>
<A HREF="#idx1298">operator&lt;=()</A><BR>
<A HREF="#idx1295">operator*()</A><BR>
<A HREF="#idx1295">operator+()</A><BR>
<A HREF="#idx1295">operator-()</A><BR>
<A HREF="#idx1295">operator/()</A><BR>
<A HREF="#idx1298">operator==()</A><BR>
<A HREF="#idx1296">operator^()</A><BR>
<A HREF="#idx1295">operator^()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx1297">operator^()</A><BR>
<A HREF="#idx1295">operator|()</A><BR>
<A HREF="#idx1298">operator||()</A><BR>
<A HREF="#idx1302">pow()</A><BR>
<A HREF="#idx1301">sin()</A><BR>
<A HREF="#idx1301">sinh()</A><BR>
<A HREF="#idx1301">sqrt()</A><BR>
<A HREF="#idx1301">tan()</A><BR>
<A HREF="#idx1301">tanh()</A><BR>
</TD></TR>
</TABLE></UL>
<A NAME="sec2"><H3>Summary</H3></A>
<P>An optimized array class for numeric operations</P>
<A NAME="sec3"><H3>Synopsis</H3></A>
<PRE>#include &lt;valarray&gt;
namespace std {
template &lt;class T &gt;
class valarray;
}
</PRE>
<A NAME="sec4"><H3>Description</H3></A>
<P>Class <B><I>valarray</I></B> and its associated classes <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>, represent and manipulate one-dimensional arrays of values. Elements in a <B><I>valarray</I></B> are indexed sequentially beginning with zero. </P>
<P>Unlike other classes in the Standard Library, <B><I>valarray</I></B> can only be used with a fairly narrow range of types. This restriction ensures that numeric operations on a <B><I>valarray</I></B> can be as efficient as possible by avoiding aliasing ambiguities and excess temporaries.</P>
<A NAME="sec5"><H3>Interface</H3></A>
<UL><PRE>namespace std {
template &lt;class T&gt; class valarray {
public:
// types
typedef T value_type;
// constructors
valarray( );
explicit valarray(size_t);
valarray(const T&amp;, size_t);
valarray(const T* , size_t);
valarray(const valarray&lt;T&gt;&amp;);
valarray(const slice_array&lt;T&gt;&amp;);
valarray(const gslice_array&lt;T&gt;&amp;);
valarray(const mask_array&lt;T&gt;&amp;);
valarray(const indirect_array&lt;T&gt;&amp;);
// destructor
~valarray();
// operator =
valarray&lt;T&gt;&amp; operator=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator=(const slice_array&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator=(const gslice_array&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator=(const mask_array&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator=(const indirect_array&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator=(const T&amp;);
// operator[]
T operator[](size_t) const;
T&amp; operator[](size_t);
valarray&lt;T&gt; operator[](slice) const;
slice_array&lt;T&gt; operator[](slice);
valarray&lt;T&gt; operator[](const gslice&amp;) const;
gslice_array&lt;T&gt; operator[](const gslice&amp;);
valarray&lt;T&gt; operator[](const valarray&lt;bool&gt;&amp;) const;
mask_array&lt;T&gt; operator[](const valarray&lt;bool&gt;&amp;);
valarray&lt;T&gt; operator[](const valarray&lt;size_t&gt;&amp;) const;
indirect_array&lt;T&gt; operator[](const valarray&lt;size_t&gt;&amp;);
// unary operators
valarray&lt;T&gt; operator+() const;
valarray&lt;T&gt; operator-() const;
valarray&lt;T&gt; operator~() const;
valarray&lt;bool&gt; operator!() const;
// computed assignment
valarray&lt;T&gt;&amp; operator*=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator/=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator+=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator-=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator%=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator^=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator&amp;=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator|=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator&lt;&lt;=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator&gt;&gt;=(const valarray&lt;T&gt;&amp;);
valarray&lt;T&gt;&amp; operator*=(const T&amp;);
valarray&lt;T&gt;&amp; operator/=(const T&amp;);
valarray&lt;T&gt;&amp; operator%=(const T&amp;);
valarray&lt;T&gt;&amp; operator+=(const T&amp;);
valarray&lt;T&gt;&amp; operator-=(const T&amp;);
valarray&lt;T&gt;&amp; operator^=(const T&amp;);
valarray&lt;T&gt;&amp; operator&amp;=(const T&amp;);
valarray&lt;T&gt;&amp; operator|=(const T&amp;);
valarray&lt;T&gt;&amp; operator&lt;&lt;=(const T&amp;);
valarray&lt;T&gt;&amp; operator&gt;&gt;=(const T&amp;);
// others
size_t size() const;
T sum() const;
T min() const;
T max() const;
valarray&lt;T&gt; shift(int) const;
valarray&lt;T&gt; cshift(int) const;
valarray&lt;T&gt; apply(T func(T)) const;
valarray&lt;T&gt; apply(T func(const T&amp;)) const;
void resize(size_t, const T&amp; = T() );
};
// Nonmember binary operators
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 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 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 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|(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 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;bool&gt;
operator&amp;&amp;(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 valarray&lt;T&gt;&amp; , const T&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 valarray&lt;T&gt;&amp; , const T&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 valarray&lt;T&gt;&amp;, const T&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|(const valarray&lt;T&gt;&amp;, const T&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&gt;&gt;(const valarray&lt;T&gt;&amp;, const T&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;T&gt;
operator*(const T&amp; , const valarray&lt;T&gt;&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 T&amp;, const valarray&lt;T&gt;&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 T&amp; , const valarray&lt;T&gt;&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 T&amp;, const valarray&lt;T&gt;&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 T&amp;, const valarray&lt;T&gt;&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 T&amp;, const valarray&lt;T&gt;&amp;);
// Nonmember logical operators
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 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&gt;(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 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||(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 valarray&lt;T&gt;&amp; , const T&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&gt;(const valarray&lt;T&gt;&amp; , const T&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&gt;=(const valarray&lt;T&gt;&amp; , const T&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 T&amp; , const valarray&lt;T&gt;&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 T&amp; , const valarray&lt;T&gt;&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 T&amp; , const valarray&lt;T&gt;&amp; );
template&lt;class T&gt; valarray&lt;bool&gt;
operator||(const T&amp; , const valarray&lt;T&gt;&amp; );
// Nonmember transcendental functions
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; 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; sinh(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; 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; );
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;
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; );
}
</PRE></UL>
<A NAME="sec6"><H3>Constructors</H3></A>
<A NAME="idx1254"></A><PRE><B>valarray</B>();</PRE>
<UL>
<P>Creates a <B><I>valarray</I></B> of length zero.</P>
</UL>
<A NAME="idx1255"></A><PRE>explicit <B>valarray</B>(size_t n);</PRE>
<UL>
<P>Creates a <B><I>valarray</I></B> of length <SAMP>n</SAMP>, containing <SAMP>n</SAMP> values initialized with the default value for type <SAMP>T</SAMP>. <SAMP>T</SAMP> must have a default constructor. </P>
</UL>
<A NAME="idx1256"></A><PRE><B>valarray</B>(const T&amp; value, size_t n);</PRE>
<UL>
<P>Creates a <B><I>valarray</I></B> of length <SAMP>n</SAMP>, containing <SAMP>n</SAMP> values initialized with <SAMP>value</SAMP>. </P>
</UL>
<A NAME="idx1257"></A><PRE><B>valarray</B>(const T* value, size_t n);</PRE>
<UL>
<P>Creates a <B><I>valarray</I></B> of length <SAMP>n</SAMP>, containing <SAMP>n</SAMP> values initialized with the first <SAMP>n</SAMP> elements pointed to by <SAMP>value</SAMP>. The array pointed to by <SAMP>value</SAMP> must contain at least <SAMP>n</SAMP> values.</P>
</UL>
<A NAME="idx1258"></A><PRE><B>valarray</B>(const valarray&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Creates a copy of <SAMP>x</SAMP>.</P>
</UL>
<A NAME="idx1259"></A><PRE><B>valarray</B>(const slice_array&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Creates a <B><I>valarray</I></B> from the <B><I><A HREF="slice-array.html">slice_array</A></I></B> <SAMP>x</SAMP>. </P>
</UL>
<A NAME="idx1260"></A><PRE><B>valarray</B>(const gslice_array&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Creates a <B><I>valarray</I></B> from the <B><I><A HREF="gslice-array.html">gslice_array</A></I></B> <SAMP>x</SAMP>. </P>
</UL>
<A NAME="idx1261"></A><PRE><B>valarray</B>(const mask_array&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Creates a <B><I>valarray</I></B> from the <B><I><A HREF="mask-array.html">mask_array</A></I></B> <SAMP>x</SAMP>. </P>
</UL>
<A NAME="idx1262"></A><PRE><B>valarray</B>(const indirect_array&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Creates a <B><I>valarray</I></B> from the <B><I><A HREF="indirect-array.html">indirect_array</A></I></B> <SAMP>x</SAMP>. </P>
</UL>
<A NAME="sec7"><H3>Destructor</H3></A>
<A NAME="idx1263"></A><PRE><B>~valarray</B>();</PRE>
<UL>
<P>Applies <SAMP>~T()</SAMP> to every element in the <B><I>valarray</I></B> and returns all allocated memory. </P>
</UL>
<A NAME="sec8"><H3>Assignment Operators</H3></A>
<BLOCKQUOTE><HR><B>
NOTE -- Before calling these functions, portable code should guarantee that both sides of the assignment operator refer to objects of the same size.
</B><HR></BLOCKQUOTE>
<A NAME="idx1264"></A><PRE>valarray&lt;T&gt;&amp;
<B>operator=</B>(const valarray&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Assigns to each element of self the corresponding value from <SAMP>x</SAMP>. If self has more or fewer elements than <SAMP>x</SAMP>, then the resulting behavior is undefined.</P>
<P>self is resized to match the size of <SAMP>x</SAMP>. Returns a reference to self.</P>
</UL>
<A NAME="idx1265"></A><PRE>valarray&lt;T&gt;&amp;
<B>operator=</B>(const T&amp; x);</PRE>
<UL>
<P>Assigns to each element of self the value of <SAMP>x</SAMP>. Returns a reference to self.</P>
</UL>
<A NAME="idx1266"></A><PRE>valarray&lt;T&gt;&amp;
<B>operator=</B>(const slice_array&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Copies elements from <SAMP>x</SAMP> into self by stepping through each slice consecutively. If self has more or fewer elements than <SAMP>x</SAMP>, then self is resized to match the size of <SAMP>x</SAMP>. Returns a reference to self.</P>
</UL>
<A NAME="idx1267"></A><PRE>valarray&lt;T&gt;&amp;
<B>operator=</B>(const gslice_array&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Copies elements from <SAMP>x</SAMP> into self by stepping through each slice consecutively. If self has more or fewer elements than <SAMP>x</SAMP>, then self is resized to match the size of <SAMP>x</SAMP>. Returns a reference to self.</P>
</UL>
<A NAME="idx1268"></A><PRE>valarray&lt;T&gt;&amp;
<B>operator=</B>(const mask&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Copies each consecutive element from <SAMP>x</SAMP> into self. If self has more or fewer elements than <SAMP>x</SAMP>, then self is resized to match the size of <SAMP>x</SAMP>. Returns a reference to self.</P>
</UL>
<A NAME="idx1269"></A><PRE>valarray&lt;T&gt;&amp;
<B>operator=</B>(const indirect_array&lt;T&gt;&amp; x);</PRE>
<UL>
<P>Copies each consecutive element from <SAMP>x</SAMP> into self. If self has more or fewer elements than <SAMP>x</SAMP>, then self is resized to match the size of <SAMP>x</SAMP>. Returns a reference to self.</P>
</UL>
<A NAME="sec9"><H3>Element Access Operators</H3></A>
<A NAME="idx1270"></A><PRE>T&amp; <B>operator[]</B>(size_type n);</PRE>
<UL>
<P>Returns a reference to element <SAMP>n</SAMP> of self. The result can be used as an <SAMP>lvalue</SAMP>. This reference is valid until the resize function is called or the array is destroyed. The index <SAMP>n</SAMP> must be between <SAMP>0</SAMP> and <SAMP>size</SAMP> less one.</P>
</UL>
<A NAME="idx1271"></A><PRE>T <B>operator[]</B>(size_type n) const;</PRE>
<UL>
<P>Returns the value at element <SAMP>n</SAMP> of self. The index <SAMP>n</SAMP> must be between <SAMP>0</SAMP> and <SAMP>size</SAMP> less one.</P>
</UL>
<A NAME="sec10"><H3>Subset Operators</H3></A>
<A NAME="idx1272"></A><PRE>valarray&lt;T&gt; <B>operator[]</B>(slice s) const;</PRE>
<UL>
<P>Returns a subset of the self as specified by <SAMP>s</SAMP>. The return value is a new <B><I>valarray</I></B> object. See <B><I><A HREF="slice.html">slice</A></I></B> for a description of a BLAS-like slice.</P>
</UL>
<A NAME="idx1273"></A><PRE>slice_array&lt;T&gt; <B>operator[]</B>(slice s); </PRE>
<UL>
<P>Returns a subset of the self as specified by <SAMP>s</SAMP>. The return value is a <B><I><A HREF="slice-array.html">slice_array</A></I></B> referencing elements inside self. See <B><I><A HREF="slice.html">slice</A></I></B> and <B><I>slice_array</I></B>.</P>
</UL>
<A NAME="idx1274"></A><PRE>valarray&lt;T&gt; <B>operator[]</B>(const gslice&amp; s) const;</PRE>
<UL>
<P>Returns a subset of the self as specified by <SAMP>s</SAMP>. The return value is a new <B><I>valarray</I></B> object. See <B><I><A HREF="gslice.html">gslice</A></I></B> for a description of a generalized slice.</P>
</UL>
<A NAME="idx1275"></A><PRE>gslice_array&lt;T&gt; <B>operator[]</B>(const gslice&amp; s); </PRE>
<UL>
<P>Returns a subset of the self as specified by <SAMP>s</SAMP>. The return value is a <B><I><A HREF="gslice-array.html">gslice_array</A></I></B> referencing elements inside self. See <B><I><A HREF="gslice.html">gslice</A></I></B> and <B><I>gslice_array</I></B>.</P>
</UL>
<A NAME="idx1276"></A><PRE>valarray&lt;T&gt; <B>operator[]</B>(const valarray&lt;bool&gt;&amp; v) const;</PRE>
<UL>
<P>Returns a subset of the self as specified by <SAMP>v</SAMP>. The return value is a new <B><I>valarray</I></B> object.</P>
</UL>
<A NAME="idx1277"></A><PRE>mask_array&lt;T&gt; <B>operator[]</B>(const valarray&lt;bool&gt;&amp; v); </PRE>
<UL>
<P>Returns a subset of the self as specified by <SAMP>v</SAMP>. The return value is a <B><I><A HREF="mask-array.html">mask_array</A></I></B> referencing elements inside self. See <B><I>mask_array</I></B>.</P>
</UL>
<A NAME="idx1278"></A><PRE>valarray&lt;T&gt; <B>operator[]</B>(const valarray&lt;size_t&gt;&amp; v) const;</PRE>
<UL>
<P>Returns a subset of the self as specified by <SAMP>v</SAMP>. The return value is a new <B><I>valarray</I></B> object.</P>
</UL>
<A NAME="idx1279"></A><PRE>Indirect_array&lt;T&gt; <B>operator[]</B>(const valarray&lt;size_t&gt;&amp; v); </PRE>
<UL>
<P>Returns a subset of the self as specified by <SAMP>v</SAMP>. The return value is a <B><I><A HREF="indirect-array.html">indirect_array</A></I></B> referencing elements inside self. See <B><I>indirect_array</I></B>.</P>
</UL>
<A NAME="sec11"><H3>Unary Operators</H3></A>
<A NAME="idx1280"></A><PRE>valarray&lt;T&gt; <B>operator+</B>() const;</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the array in self where each element has been initialized by applying <SAMP>operator+()</SAMP> to the corresponding element in self. This operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports an <SAMP>operator+()</SAMP> that returns <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. </P>
</UL>
<A NAME="idx1281"></A><PRE>valarray&lt;T&gt; <B>operator-</B>() const;</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the array in self where each element has been initialized by applying <SAMP>operator-()</SAMP> to the corresponding element in self. This operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports an <SAMP>operator-()</SAMP> returning <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. </P>
</UL>
<A NAME="idx1282"></A><PRE>valarray&lt;T&gt; <B>operator~</B>() const;</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the array in self where each element has been initialized by applying <SAMP>operator~()</SAMP> to the corresponding element in self. This operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports an <SAMP>operator~()</SAMP> returning <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. </P>
</UL>
<A NAME="idx1283"></A><PRE>valarray&lt;bool&gt; <B>operator!</B>() const;</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the array in self where each element has been initialized by applying <SAMP>operator!()</SAMP> to the corresponding element in self. This operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports an <SAMP>operator!()</SAMP> returning <SAMP>bool</SAMP> or a type convertible to <SAMP>bool</SAMP>.</P>
</UL>
<A NAME="sec12"><H3>Computed Assignment Operators</H3></A>
<A NAME="idx1284"></A><PRE>valarray&lt;T&gt;&amp; <B>operator*=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator/=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator%=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator+=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator-=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator^=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator&amp;=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator|=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator&lt;&lt;=</B>(const valarray&lt;T&gt;&amp; val);
valarray&lt;T&gt;&amp; <B>operator&gt;&gt;=</B>(const valarray&lt;T&gt;&amp; val);</PRE>
<UL>
<P>Applies the indicated operation to each element in self, using the corresponding element from <SAMP>val</SAMP> as the right hand argument (for example, for all <SAMP>0 &lt;= n &lt; *this.size(), *this[n] += val[n]</SAMP>). This operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports the indicated operation. The length of <SAMP>val</SAMP> must also equal the length of self. Returns self.</P>
</UL>
<A NAME="idx1285"></A><PRE>valarray&lt;T&gt;&amp; <B>operator*=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator/=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator%=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator+=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator-=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator^=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator&amp;=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator|=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator&lt;&lt;=</B>(const T&amp; val);
valarray&lt;T&gt;&amp; <B>operator&gt;&gt;=</B>(const T&amp; val);</PRE>
<UL>
<P>Applies the indicated operation to each element in self, using <SAMP>val</SAMP> as the right hand argument (for example, for all <SAMP>0 &lt;= n &lt; *this.size(), *this[n] += val</SAMP>). This operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports the indicated operation. Returns self.</P>
</UL>
<A NAME="sec13"><H3>Member Functions</H3></A>
<A NAME="idx1286"></A><PRE>size_t <B>size</B>() const;</PRE>
<UL>
<P>Returns the number of elements.</P>
</UL>
<A NAME="idx1287"></A><PRE>T <B>sum</B>() const;</PRE>
<UL>
<P>This function uses <SAMP>operator+=</SAMP> to sum all the elements of the array. Sum can only be called for a <B><I>valarray</I></B> instantiated on a type that supports <SAMP>operator+=()</SAMP>. The array must also have at least one element. Returns the sum of all elements in the array.</P>
</UL>
<A NAME="idx1288"></A><PRE>T <B>min</B>() const;</PRE>
<UL>
<P>This function uses <SAMP>operator&lt;()</SAMP> to find the minimum element in the array. The array must have at least one element. Returns the minimum of all elements in the array.</P>
</UL>
<A NAME="idx1289"></A><PRE>T <B>max</B>() const;</PRE>
<UL>
<P>This function uses <SAMP>operator&lt;()</SAMP> to find the maximum element in the array. The array must have at least one element. Returns the maximum of all elements in the array.</P>
</UL>
<A NAME="idx1290"></A><PRE>valarray&lt;T&gt; <B>shift</B>(int n) const;</PRE>
<UL>
<P>This function returns a new <B><I>valarray</I></B> object whose elements have all been shifted <SAMP>n</SAMP> places to left or right with respect to self. A positive value of <SAMP>n</SAMP> shifts the elements to the left, a negative value to the right. The default constructor for <SAMP>T</SAMP> is used to fill in behind the shifting elements. For example, applying <SAMP>shift(2)</SAMP> to an array corresponding to [3,4,5,6] results in [5,6,0,0], and applying <SAMP>shift(-1)</SAMP> to [3,4,5,6] results in [0,3,4,5].</P>
</UL>
<A NAME="idx1291"></A><PRE>valarray&lt;T&gt; <B>cshift</B>(int n) const;</PRE>
<UL>
<P>This function returns a new <B><I>valarray</I></B> object whose elements have all been rotated <SAMP>n</SAMP> places to left or right with respect to self. A positive value of <SAMP>n</SAMP> shifts the elements to the left, a negative value to the right. For example, applying <SAMP>shift(2)</SAMP> to an array corresponding to [3,4,5,6] results in [5,6,3,4], and applying <SAMP>shift(-1)</SAMP> to [3,4,5,6] results in [6,3,4,5].</P>
</UL>
<A NAME="idx1292"></A><PRE>valarray&lt;T&gt; <B>apply</B>(T func(T)) const;</PRE>
<UL>
<P>This function returns a new <B><I>valarray</I></B> object with the same length as the array in self but whose elements have all been initialized by applying the argument function <SAMP>func</SAMP> to the corresponding element in self (in other words, for all<SAMP> n &lt; *this.size()</SAMP>, the <SAMP>nth</SAMP> element of the returned array equals<SAMP> func(*this[n]))</SAMP>.</P>
</UL>
<A NAME="idx1293"></A><PRE>valarray&lt;T&gt; <B>apply</B>(T func(const T&amp;)) const;</PRE>
<UL>
<P>This function returns a new <B><I>valarray</I></B> object with the same length as the array in self but whose elements have all been initialized by applying the argument function <SAMP>func</SAMP> to the corresponding element in self (in other words, for all <SAMP>0 &lt;= n &lt; *this.size()</SAMP>, the <SAMP>nth</SAMP> element of the returned array equals <SAMP>func(*this[n]))</SAMP>.</P>
</UL>
<A NAME="idx1294"></A><PRE>void
<B>resize</B>(size_type sz, T c = T());</PRE>
<UL>
<P>Changes the length of self to <SAMP>sz</SAMP>, and assigns <SAMP>c</SAMP> to every element. This function also invalidates all outstanding references to self. </P>
</UL>
<A NAME="sec14"><H3>Nonmember Binary Operators</H3></A>
<A NAME="idx1295"></A><PRE>template &lt;class T&gt; valarray&lt;T&gt;
<B>operator*</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator/</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator%</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator+</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator-</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator^</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&amp;</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator|</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&lt;&lt;</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&gt;&gt;</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the argument arrays where each element has been initialized by applying the indicated operation to the corresponding elements in the argument arrays. The operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports a form of the indicated operation that returns <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. The argument arrays must have the same length.</P>
</UL>
<A NAME="idx1296"></A><PRE>template &lt;class T&gt; valarray&lt;T&gt;
<B>operator*</B>(const valarray&lt;T&gt;&amp; lhs, T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator/</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator%</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator+</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator-</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator^</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&amp;</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator|</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&lt;&lt;</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&gt;&gt;</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the <B><I>valarray</I></B> <SAMP>lhs</SAMP> where each element has been initialized by applying the indicated operation to the corresponding element in <SAMP>lhs</SAMP> and the value <SAMP>rhs</SAMP>. The operation can only be used with a type <SAMP>T</SAMP> that supports a form of the indicated operation that returns <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. </P>
</UL>
<A NAME="idx1297"></A><PRE>template &lt;class T&gt; valarray&lt;T&gt;
<B>operator*</B>(const T&amp; rhs, valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator/</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator%</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator+</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator-</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator^</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&amp;</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator|</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&lt;&lt;</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;T&gt;
<B>operator&gt;&gt;</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the <B><I>valarray</I></B> <SAMP>rhs</SAMP> where each element has been initialized by applying the indicated operation to the corresponding element in <SAMP>rhs</SAMP> and the value <SAMP>lhs</SAMP>. The operation can only be used with a type <SAMP>T</SAMP> that supports a form of the indicated operation that returns <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. </P>
</UL>
<A NAME="sec15"><H3>Nonmember Logical Operators</H3></A>
<A NAME="idx1298"></A><PRE>template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator==</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator!=</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&lt;</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&gt;</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&lt;=</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&gt;=</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&amp;&amp;</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator||</B>(const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs);</PRE>
<UL>
<P>Returns a <B><I>valarray&lt;bool&gt;</I></B> object of the same size as the argument arrays where each element has been initialized by applying the indicated operation to the corresponding elements in the argument arrays. The operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that support a form of the indicated operation that returns <SAMP>bool</SAMP> or a type convertible to&nbsp;<SAMP>bool</SAMP>. The argument arrays must have the same length.</P>
</UL>
<A NAME="idx1299"></A><PRE>template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator==</B>(const valarray&lt;T&gt;&amp; lhs, T&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator!=</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&lt;</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&gt;</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&lt;=</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&gt;=</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&amp;&amp;</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator||</B>(const valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);</PRE>
<UL>
<P>Returns a <B><I>valarray&lt;bool&gt;</I></B> object of the same size as the <B><I>valarray</I></B> <SAMP>lhs</SAMP> where each element has been initialized by applying the indicated operation to the corresponding element in <SAMP>lhs</SAMP> and the value <SAMP>rhs</SAMP>. The operation can only be used with a type <SAMP>T</SAMP> that supports a form of the indicated operation that returns <SAMP>bool</SAMP> or a type convertible to <SAMP>bool</SAMP>. </P>
</UL>
<A NAME="idx1300"></A><PRE>template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator==</B>(const T&amp; rhs, valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator!=</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&lt;</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&gt;</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&lt;=</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&gt;=</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator&amp;&amp;</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; valarray&lt;bool&gt;
<B>operator||</B>(const T&amp; lhs, const valarray&lt;T&gt;&amp; rhs);</PRE>
<UL>
<P>Returns a <B><I>valarray&lt;bool&gt;</I></B> object of the same size as the valarray <SAMP>rhs</SAMP> where each element has been initialized by applying indicated operation to the corresponding element in <SAMP>rhs</SAMP> and the value <SAMP>lhs</SAMP>. The operation can only be used with a type <SAMP>T</SAMP> that supports a form of the indicated operation that returns <SAMP>bool</SAMP> or a type convertible to <SAMP>bool</SAMP>. </P>
</UL>
<A NAME="sec16"><H3>Nonmember Transcen-dental Functions</H3></A>
<A NAME="idx1301"></A><PRE>template &lt;class T&gt; valarray&lt;T&gt; <B>abs</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>acos</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>asin</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>atan</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>cos</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>cosh</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>exp</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>log</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>log10</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>sin</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>sinh</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>sqrt</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>tan</B>(const valarray&lt;T&gt;&amp; v);
template &lt;class T&gt; valarray&lt;T&gt; <B>tanh</B>(const valarray&lt;T&gt;&amp; v);</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the argument array where each element has been initialized by applying the indicated transcendental function to the corresponding elements in the argument array. The operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports a unique form of the indicated function that returns <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. </P>
</UL>
<A NAME="idx1302"></A><PRE>template &lt;class T&gt; valarray&lt;T&gt;
<B>atan2</B>(const valarray&lt;T&gt;&amp; v, const valarray&lt;T&gt;&amp; v2);
template &lt;class T&gt; valarray&lt;T&gt;
<B>pow</B>(const valarray&lt;T&gt;&amp; v, const valarray&lt;T&gt;&amp; v2);</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the argument arrays where each element has been initialized by applying the indicated transcendental function to the corresponding elements in the argument arrays. The operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports a unique form of the indicated function that returns <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. </P>
</UL>
<A NAME="idx1303"></A><PRE>template &lt;class T&gt; valarray&lt;T&gt;
<B>atan2</B>(const valarray&lt;T&gt;&amp; v, const T&amp; v2);
template &lt;class T&gt; valarray&lt;T&gt;
<B>pow</B>(const valarray&lt;T&gt;&amp; v, const T&amp; v2);</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the argument array <SAMP>v</SAMP> where each element has been initialized by applying the indicated transcendental function to the corresponding elements in <SAMP>v</SAMP> along with the value <SAMP>v2</SAMP>. The operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports a unique form of the indicated function that returns <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>. </P>
</UL>
<A NAME="idx1304"></A><PRE>template &lt;class T&gt; valarray&lt;T&gt;
<B>atan2</B>(const T&amp; v, const valarray&lt;T&gt; v2);
template &lt;class T&gt; valarray&lt;T&gt;
<B>pow</B>(const T&amp; v, const valarray&lt;T&gt; v2);</PRE>
<UL>
<P>Returns a new <B><I>valarray</I></B> object of the same size as the argument array <SAMP>v2</SAMP> where each element has been initialized by applying the indicated transcendental function to the corresponding elements in <SAMP>v2</SAMP> along with the value <SAMP>v</SAMP>. The operation can only be applied to a <B><I>valarray</I></B> instantiated on a type <SAMP>T</SAMP> that supports a unique form of the indicated function that returns <SAMP>T</SAMP> or a type convertible to <SAMP>T</SAMP>.</P>
</UL>
<A NAME="sec17"><H3>Example</H3></A>
<UL><PRE>//
// valarray.cpp
//
#include &lt;cstddef&gt; // for size_t
#include &lt;iostream&gt; // for cout
#include &lt;valarray&gt; // for valarray
template &lt;class T&gt;
inline std::ostream&
operator&lt;&lt; (std::ostream &amp;out, const std::valarray&lt;T&gt; &amp;v)
{
out &lt;&lt; '[';
for (std::size_t i = 0; i &lt; v.size (); ++i) {
out &lt;&lt; v [i];
if (i &lt; v.size () - 1)
out &lt;&lt; ',';
}
return out &lt;&lt; ']';
}
int main ()
{
const int ibuf[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const int ibuf2[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
// create 2 valarrays of ints
std::valarray&lt;int&gt; vi (ibuf, sizeof ibuf / sizeof *ibuf);
std::valarray&lt;int&gt; vi2 (ibuf2, sizeof ibuf2 / sizeof *ibuf2);
// print them out
std::cout &lt;&lt; vi &lt;&lt; '\n' &lt;&lt; vi2 &lt;&lt; '\n';
vi += vi2;
vi2 *= 2;
std::valarray&lt;int&gt; vi3 = vi2 % vi;
// print them out again
std::cout &lt;&lt; vi &lt;&lt; '\n' &lt;&lt; vi2 &lt;&lt; '\n' &lt;&lt; vi3 &lt;< '\n';
return 0;
}
Program Output:
</PRE></UL>
<UL><PRE>[0,1,2,3,4,5,6,7,8,9]
[10,11,12,13,14,15,16,17,18,19]
[10,12,14,16,18,20,22,24,26,28]
[20,22,24,26,28,30,32,34,36,38]
[0,10,10,10,10,10,10,10,10,10]
</PRE></UL>
<A NAME="sec18"><H3>See Also</H3></A>
<P><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="sec19"><H3>Standards Conformance</H3></A>
<P><I>ISO/IEC 14882:1998 -- International Standard for Information Systems --Programming Language C++, Section 26.3.2</I></P>
<BR>
<HR>
<A HREF="valarray-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="vector-h.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>