📄 blitz_2.html
字号:
<HTML><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><!-- Created on November, 4 2004 by texi2html 1.64 --><!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> Olaf Bachmann <obachman@mathematik.uni-kl.de> and many others.Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> --><HEAD><TITLE>Blitz++: Arrays</TITLE><META NAME="description" CONTENT="Blitz++: Arrays"><META NAME="keywords" CONTENT="Blitz++: Arrays"><META NAME="resource-type" CONTENT="document"><META NAME="distribution" CONTENT="global"><META NAME="Generator" CONTENT="texi2html 1.64"></HEAD><BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"><A NAME="SEC28"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_1.html#SEC27"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC29"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_3.html#SEC74"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz.html#SEC_Top"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_3.html#SEC74"> >> </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><H1> 2. Arrays </H1><!--docid::SEC28::--><BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC29">2.1 Getting started</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC34">2.2 Public types</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Public types declaration for Array</TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC35">2.3 Constructors</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Array constructors</TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC45">2.4 Indexing, subarrays, and slicing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to access the elements of an Array?</TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC49">2.4.4 Slicing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The slicing machinery</TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC53">2.5 Debug mode</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to debug a program that uses Blitz++?</TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC54">2.6 Member functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Array member functions</TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC58">2.7 Global functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Array global functions</TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC59">2.8 Inputting and Outputting Arrays</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Inputting and outputting Array's</TD></TR><TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC62">2.9 Array storage orders</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The storage of Array</TD></TR></TABLE></BLOCKQUOTE><P><A NAME="Array intro"></A><HR SIZE="6"><A NAME="SEC29"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC28"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC30"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC28"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC28"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC34"> >> </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.1 Getting started </H2><!--docid::SEC29::--><P>Currently, Blitz++ provides a single array class, called<CODE>Array<T_numtype,N_rank></CODE>. This array class provides a dynamicallyallocated N-dimensional array, with reference counting, arbitrary storageordering, subarrays and slicing, flexible expression handling, and manyother useful features.</P><P><HR SIZE="6"><A NAME="SEC30"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC29"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC31"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC28"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC29"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC34"> >> </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.1 Template parameters </H3><!--docid::SEC30::--><P>The <CODE>Array</CODE> class takes two template parameters:</P><P><UL><LI><CODE>T_numtype</CODE>is the numeric type to be stored in the array. <CODE>T_numtype</CODE> can be anintegral type (<CODE>bool</CODE>, <CODE>char</CODE>, <CODE>unsigned char</CODE>, <CODE>shortint</CODE>, <CODE>short unsigned int</CODE>, <CODE>int</CODE>, <CODE>unsigned int</CODE>,<CODE>long</CODE>, <CODE>unsigned long</CODE>), floating point type (<CODE>float</CODE>,<CODE>double</CODE>, <CODE>long double</CODE>), complex type (<CODE>complex<float></CODE>,<CODE>complex<double></CODE>, <CODE>complex<long double></CODE>) or any user-definedtype with appropriate numeric semantics.<P><LI><CODE>N_rank</CODE><A NAME="IDX5"></A><A NAME="IDX6"></A>is the <STRONG>rank</STRONG> (or dimensionality) of the array. This should be apositive integer. <P></UL><P>To use the <CODE>Array</CODE> class, include the header <CODE><blitz/array.h></CODE> anduse the namespace <CODE>blitz</CODE>:</P><P><A NAME="IDX7"></A><A NAME="IDX8"></A><A NAME="IDX9"></A></P><P><TABLE><tr><td> </td><td class=example><pre>#include <blitz/array.h>using namespace blitz;Array<int,1> x; // A one-dimensional array of intArray<double,2> y; // A two-dimensional array of double..Array<complex<float>, 12> z; // A twelve-dimensional array of complex<float></pre></td></tr></table></P><P>When no constructor arguments are provided, the array is empty, and nomemory is allocated. To create an array which contains some data, providethe size of the array as constructor arguments:</P><P><TABLE><tr><td> </td><td class=example><pre>Array<double,2> y(4,4); // A 4x4 array of double</pre></td></tr></table></P><P>The contents of a newly-created array are garbage. To initializethe array, you can write:</P><P><TABLE><tr><td> </td><td class=example><pre>y = 0;</pre></td></tr></table></P><P>and all the elements of the array will be set to zero. If the contents ofthe array are known, you can initialize it using a comma-delimited list ofvalues. For example, this code excerpt sets <CODE>y</CODE> equal to a 4x4identity matrix:</P><P><TABLE><tr><td> </td><td class=example><pre>y = 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1;</pre></td></tr></table></P><P><HR SIZE="6"><A NAME="SEC31"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC30"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC32"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC32"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC29"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC34"> >> </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.2 Array types </H3><!--docid::SEC31::--><P>The <CODE>Array<T,N></CODE> class supports a variety of arrays:</P><P><UL><A NAME="IDX10"></A><LI>Arrays of scalar types, such as <CODE>Array<int,1></CODE> and<CODE>Array<float,3></CODE> <P><A NAME="IDX11"></A><A NAME="IDX12"></A><LI>Complex arrays, such as <CODE>Array<complex<float>,2></CODE><P><A NAME="IDX13"></A><A NAME="IDX14"></A><A NAME="IDX15"></A><A NAME="IDX16"></A><A NAME="IDX17"></A><A NAME="IDX18"></A><A NAME="IDX19"></A><A NAME="IDX20"></A><LI>Arrays of user-defined types. If you have a class called<CODE>Polynomial</CODE>, then <CODE>Array<Polynomial,2></CODE> is an array of<CODE>Polynomial</CODE> objects. <P><A NAME="IDX21"></A><A NAME="IDX22"></A><A NAME="IDX23"></A><LI>Nested homogeneous arrays using <CODE>TinyVector</CODE> and<CODE>TinyMatrix</CODE>, in which each element is a fixed-size vector or array.For example, <CODE>Array<TinyVector<float,3>,3></CODE> is a three-dimensionalvector field.<P><LI>Nested heterogeneous arrays, such as <CODE>Array<Array<int,1>,1></CODE>, inwhich each element is a variable-length array.</UL><P><HR SIZE="6"><A NAME="SEC32"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC31"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC33"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC33"> << </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC29"> Up </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC34"> >> </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.3 A simple example </H3><!--docid::SEC32::--><P>Here's an example program which creates two 3x3 arrays, initializesthem, and adds them:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>#include <blitz/array.h>using namespace blitz;int main(){ Array<float,2> A(3,3), B(3,3), C(3,3); A = 1, 0, 0, 2, 2, 2, 1, 0, 0; B = 0, 0, 7, 0, 8, 0, 9, 9, 9; C = A + B; cout << "A = " << A << endl << "B = " << B << endl << "C = " << C << endl; return 0;}</FONT></pre></td></tr></table></P><P>and the output:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>A = 3 x 3[ 1 0 0 2 2 2 1 0 0 ]B = 3 x 3[ 0 0 7 0 8 0 9 9 9 ]C = 3 x 3[ 1 0 7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -