The TinyVector
class provides a small, lightweight vector
object whose size is known at compile time. It is included
via the header <blitz/tinyvec.h>
.
Note that TinyVector
lives in the blitz
namespace,
so you will need to refer to it as blitz::TinyVector
,
or use the directive using namespace blitz;
.
The Blitz++ Array
object uses TinyVector
internally, so
if you include <blitz/array.h>
, the TinyVector
header is automatically included.
7.1: Template parameters and types |
The TinyVector<T,N>
class has two template parameters:
T
is the numeric type of the vector (float, double, int,
complex<float>
, etc.;
N
is the number of elements in the vector.
Inside the TinyVector
class, these types are declared:
T_numtype
is the numeric type stored in the vector (the
template parameter T
)
T_vector
is the vector type TinyVector<T,N>
.
iterator
is an STL-style iterator.
constIterator
is an STL-style const iterator.
7.2: Constructors |
TinyVector();
The elements of the vector are left uninitialized.
TinyVector(const TinyVector<T,N>& x);
The elements of vector x
are copied.
TinyVector(T value);
All elements are initialized to value
.
TinyVector(T value1, T value2, ...)
The vector is initialized with the list of values given.
These constructors are provided for up to N=11.
7.3: Member functions |
TinyVector<T,N>::iterator begin();
TinyVector<T,N>::const_iterator begin() const;
Returns an STL-style iterator for the vector, positioned
at the beginning of the data.
TinyVector<T,N>::iterator end();
TinyVector<T,N>::const_iterator end() const;
Returns an STL-style iterator for the vector, positioned
at the end of the data.
T_numtype* [restrict] data();
const T_numtype* [restrict] data() const;
Returns a pointer to the first element in the vector.
int length() const;
Returns the length of the vector (the template parameter N
).
T_numtype operator()(int i) const;
T_numtype& operator()(int i);
T_numtype operator[](int i) const;
T_numtype& operator[](int i);
Returns the i
th element of the vector. If the
code is compiled with debugging enabled (-DBZ_DEBUG
),
bounds checking is performed.
7.4: Assignment operators |
The assignment operators =, +=, -=, *=, /=, %=, ^=, &=, |=, >>= and <<=
are all provided. The right hand side of an assignment may be a
scalar of type T_numtype
, a TinyVector
of any type but the
same size, or a vector expression.
7.5: Expressions |
Expressions involving tiny vectors may contain any combination of the operators
+ - * / % ^ & | >> <<
with operands of type TinyVector, scalar, or vector expressions. The usual math functions (see the Array documentation) are supported on TinyVector.
7.6: Global functions |
dot(TinyVector, TinyVector);
dot(vector-expr, TinyVector);
dot(TinyVector, vector-expr);
dot(vector-expr, vector-expr);
These functions calculate a dot product between TinyVectors
(or vector expressions). The result is a scalar; the type
of the scalar follows the usual type promotion rules.
product(TinyVector);
Returns the product of all the elements in the vector.
sum(TinyVector);
Returns the sum of the elements in the vector.
TinyVector<T,3> cross(TinyVector<T,3> x, TinyVector<T,3> y);
Returns the cross product of x
and y
.
7.7: Arrays of TinyVector |
7.8: Input/output |
ostream& operator<<(ostream&, const TinyVector<T,N>& x)
This function outputs a TinyVector onto a stream. Here's
an illustration of the format for a length 3 vector:
[ 0.5 0.2 0.9 ]