📄 blitz_2.html
字号:
<HTML><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><!-- Created on October, 14 2005 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="SEC34"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_1.html#SEC33"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC35"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_3.html#SEC80"> << </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#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><H1> 2. Arrays </H1><!--docid::SEC34::--><BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="blitz_2.html#SEC35">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#SEC40">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#SEC41">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#SEC51">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#SEC55">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#SEC59">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#SEC60">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#SEC64">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#SEC65">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#SEC68">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="SEC35"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC34"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC36"> > </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#SEC34"> 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><H2> 2.1 Getting started </H2><!--docid::SEC35::--><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="SEC36"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC35"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC37"> > </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.1 Template parameters </H3><!--docid::SEC36::--><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="SEC37"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC36"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC38"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC38"> << </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.2 Array types </H3><!--docid::SEC37::--><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="SEC38"></A><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC37"> < </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC39"> > </A>]</TD><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="blitz_2.html#SEC39"> << </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.3 A simple example </H3><!--docid::SEC38::--><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 + -