📄 blitz_2.html
字号:
2 10 2 10 9 9 ]</FONT></pre></td></tr></table></P><P><HR SIZE="6"><A NAME="SEC39"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC38"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC40"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC34"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC35"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC40"> >> </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz.html#SEC_Top">Top</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_toc.html#SEC_Contents">Contents</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_abt.html#SEC_About"> ? </A>]</TD></TR></TABLE><H3> 2.1.4 Storage orders </H3><!--docid::SEC39::--><P>Blitz++ is very flexible about the way arrays are stored in memory.</P><P>The default storage format is row-major, C-style arrays whose indices startat zero.</P><P>Fortran-style arrays can also be created. Fortran arrays are stored incolumn-major order, and have indices which start at one. To create aFortran-style array, use this syntax: <CODE>Array<int,2> A(3, 3,fortranArray);</CODE> The last parameter, <CODE>fortranArray</CODE>, tells the<CODE>Array</CODE> constructor to use a fortran-style array format. </P><P><CODE>fortranArray</CODE> is a global object which has an automatic conversion totype <CODE>GeneralArrayStorage<N></CODE>. <CODE>GeneralArrayStorage<N></CODE>encapsulates information about how an array is laid out in memory. Byaltering the contents of a <CODE>GeneralArrayStorage<N></CODE> object, you can layout your arrays any way you want: the dimensions can be ordered arbitrarilyand stored in ascending or descending order, and the starting indices can bearbitrary.</P><P>Creating custom array storage formats is described in a later section(<A HREF="blitz_2.html#SEC68">2.9 Array storage orders</A>).</P><P><A NAME="Array types"></A><HR SIZE="6"><A NAME="SEC40"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC39"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC41"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC41"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC34"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_3.html#SEC80"> >> </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz.html#SEC_Top">Top</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_toc.html#SEC_Contents">Contents</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_abt.html#SEC_About"> ? </A>]</TD></TR></TABLE><H2> 2.2 Public types </H2><!--docid::SEC40::--><P>The <CODE>Array</CODE> class declares these public types:</P><P><UL><LI><CODE>T_numtype</CODE> is the element type stored in the array. Forexample, the type <CODE>Array<double,2>::T_numtype</CODE> would be <CODE>double</CODE>.<P><LI><CODE>T_index</CODE> is a vector index into the array. The class<CODE>TinyVector</CODE> is used for this purpose.<P><LI><CODE>T_array</CODE> is the array type itself(<CODE>Array<T_numtype,N_rank></CODE>)<P><LI><CODE>T_iterator</CODE> is an iterator type. NB: this iterator is notyet fully implemented, and is NOT STL compatible at the present time.<P></UL><P><A NAME="Array ctors"></A><HR SIZE="6"><A NAME="SEC41"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC40"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC42"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC51"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC34"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC51"> >> </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz.html#SEC_Top">Top</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_toc.html#SEC_Contents">Contents</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_abt.html#SEC_About"> ? </A>]</TD></TR></TABLE><H2> 2.3 Constructors </H2><!--docid::SEC41::--><P><HR SIZE="6"><A NAME="SEC42"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC41"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC43"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC51"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC41"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC51"> >> </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz.html#SEC_Top">Top</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_toc.html#SEC_Contents">Contents</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_abt.html#SEC_About"> ? </A>]</TD></TR></TABLE><H3> 2.3.1 Default constructor </H3><!--docid::SEC42::--><P><TABLE><tr><td> </td><td class=example><pre>Array();Array(GeneralArrayStorage<N_rank> storage)</pre></td></tr></table></P><P>The default constructor creates a C-style array of zero size. Any attemptto access data in the array may result in a run-time error, because thereisn't any data to access!</P><P>An optional argument specifies a storage order for the array.</P><P>Arrays created using the default constructor can subsequently be given databy the <CODE>resize()</CODE>, <CODE>resizeAndPreserve()</CODE>, or <CODE>reference()</CODE>member functions.</P><P><HR SIZE="6"><A NAME="SEC43"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC42"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC44"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC44"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC41"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC51"> >> </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz.html#SEC_Top">Top</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_toc.html#SEC_Contents">Contents</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_abt.html#SEC_About"> ? </A>]</TD></TR></TABLE><H3> 2.3.2 Creating an array from an expression </H3><!--docid::SEC43::--><P><TABLE><tr><td> </td><td class=example><pre>Array(expression...)</pre></td></tr></table></P><P>You may create an array from an array expression. For example,</P><P><TABLE><tr><td> </td><td class=example><pre>Array<float,2> A(4,3), B(4,3); // ...Array<float,2> C(A*2.0+B);</pre></td></tr></table></P><P>This is an explicit constructor (it will not be used to perform implicittype conversions). The newly constructed array will have the same storageformat as the arrays in the expression. If arrays with different storageformats appear in the expression, an error will result. (In this case, youmust first construct the array, then assign the expression to it).</P><P><HR SIZE="6"><A NAME="SEC44"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC43"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC45"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC45"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC41"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC51"> >> </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz.html#SEC_Top">Top</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_toc.html#SEC_Contents">Contents</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_abt.html#SEC_About"> ? </A>]</TD></TR></TABLE><H3> 2.3.3 Constructors which take extent parameters </H3><!--docid::SEC44::--><P><TABLE><tr><td> </td><td class=example><pre>Array(int extent1);Array(int extent1, int extent2);Array(int extent1, int extent2, int extent3);...Array(int extent1, int extent2, int extent3, ..., int extent11)</pre></td></tr></table></P><P>These constructors take arguments which specify the size of the array to beconstructed. You should provide as many arguments as there are dimensionsin the array.<A NAME="DOCF1" HREF="blitz_fot.html#FOOT1">(1)</A></P><P>An optional last parameter specifies a storage format:</P><P><TABLE><tr><td> </td><td class=example><pre>Array(int extent1, GeneralArrayStorage<N_rank> storage);Array(int extent1, int extent2, GeneralArrayStorage<N_rank> storage);...</pre></td></tr></table></P><P>For high-rank arrays, it may be convenient to use this constructor:<A NAME="IDX24"></A></P><P><TABLE><tr><td> </td><td class=example><pre>Array(const TinyVector<int, N_rank>& extent);Array(const TinyVector<int, N_rank>& extent, GeneralArrayStorage<N_rank> storage);</pre></td></tr></table></P><P>The argument <CODE>extent</CODE> is a vector containing the extent (length) of thearray in each dimension. The optional second parameter indicates a storageformat. Note that you can construct <CODE>TinyVector<int,N></CODE> objects on thefly with the <CODE>shape(i1,i2,...)</CODE> global function. For example,<CODE>Array<int,2> A(shape(3,5))</CODE> will create a 3x5 array.</P><P>A similar constructor lets you provide both a vector of base index values(lbounds) and extents:</P><P><TABLE><tr><td> </td><td class=example><pre>Array(const TinyVector<int, N_rank>& lbound, const TinyVector<int, N_rank>& extent);Array(const TinyVector<int, N_rank>& lbound, const TinyVector<int, N_rank>& extent, GeneralArrayStorage<N_rank> storage);</pre></td></tr></table></P><P>The argument <CODE>lbound</CODE> is a vector containing the base index value (orlbound) of the array in each dimension. The argument <CODE>extent</CODE> is avector containing the extent (length) of the array in each dimension. Theoptional third parameter indicates a storage format. As with the aboveconstructor, you can use the <CODE>shape(i1,i2,...)</CODE> global function tocreate the <CODE>lbound</CODE> and <CODE>extent</CODE> parameters.</P><P><HR SIZE="6"><A NAME="SEC45"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC44"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC46"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC46"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC41"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC51"> >> </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz.html#SEC_Top">Top</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_toc.html#SEC_Contents">Contents</A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_abt.html#SEC_About"> ? </A>]</TD></TR></TABLE><H3> 2.3.4 Constructors with Range arguments </H3><!--docid::SEC45::--><P>These constructors allow arbitrary bases (starting indices) to be set:</P><P><TABLE><tr><td> </td><td class=example><pre>Array(Range r1);Array(Range r1, Range r2);Array(Range r1, Range r2, Range r3);...Array(Range r1, Range r2, Range r3, ..., Range r11);</pre></td></tr></table></P><P>For example, this code:</P><P><TABLE><tr><td> </td><td class=example><pre>Array<int,2> A(Range(10,20), Range(20,30));</pre></td></tr></table></P><P>will create an 11x11 array whose indices are 10..20 and 20..30. An optionallast parameter provides a storage order:</P><P><TABLE><tr><td> </td><td class=example><pre>Array(Range r1, GeneralArrayStorage<N_rank> storage);Array(Range r1, Range r2, GeneralArrayStorage<N_rank> storage);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -