|
Prev | Next |
# include <cppad/utility/vector.hpp>
cppad/vector.hpp defines the
vector template class CppAD::vector.
This is a SimpleVector
template class and in addition
it has the features listed below:
cppad/vector.hpp is included by cppad/cppad.hpp
but it can also be included separately with out the rest of the
CppAD include files.
x
is a
CppAD::vector<Scalar>
,
and
cap
is a size_t object,
cap = x.capacity()
set
cap
to the number of
Scalar
objects that
could fit in the memory currently allocated for
x
.
Note that
x.size() <= x.capacity()
x
and
y
are
CppAD::vector<Scalar>
objects,
y = x
has all the properties listed for a
simple vector assignment
plus the following:
CppAD::vector template class will check that
the size of
x
is either zero or the size of
y
before doing the assignment.
If this is not the case, CppAD::vector will use
ErrorHandler
to generate an appropriate error report.
Allowing for assignment to a vector with size zero makes the following
code work:
CppAD::vector<Scalar> y;
y = x;
y
is returned.
An example use of this reference is in multiple assignments of the form
z = y = x
&&
syntax, then it will be used during the vector assignment statement.
This means that return values and other temporaries are not be copied,
but rather pointers are transferred.
x
is a
CppAD::vector<Scalar>
object
and
i
has type size_t,
x[i]
has all the properties listed for a
simple vector element access
plus the following:
The object
x[i]
has type
Scalar
(is not possibly a different type that can be converted to
Scalar
).
If
i
is not less than the size of the
x
,
CppAD::vector will use
ErrorHandler
to generate an appropriate error report.
x
is a
CppAD::vector<Scalar>
object
with size equal to
n
and
s
has type
Scalar
,
x.push_back(s)
extends the vector
x
so that its new size is
n
plus one
and
x[n]
is equal to
s
(equal in the sense of the
Scalar
assignment operator).
x
is a
CppAD::vector<Scalar>
object
with size equal to
n
and
v
is a simple vector
with elements of type
Scalar
and size
m
,
x.push_vector(v)
extends the vector
x
so that its new size is
n+m
and
x[n + i]
is equal to
v[i]
for
i = 1 , ... , m-1
(equal in the sense of the
Scalar
assignment operator).
x
is a
CppAD::vector<Scalar>
object
and
os
is an std::ostream,
and the operation
os << x
will output the vector
x
to the standard
output stream
os
.
The elements of
x
are enclosed at the beginning by a
{ character,
they are separated by , characters,
and they are enclosed at the end by } character.
It is assumed by this operation that if
e
is an object with type
Scalar
,
os << e
will output the value
e
to the standard
output stream
os
.
x.resize(n)
set the size of
x
equal to
n
.
If
n <= x.capacity()
,
no memory is freed or allocated, the capacity of
x
does not change,
and the data in
x
is preserved.
If
n > x.capacity()
,
new memory is allocated and the data in
x
is lost
(not copied to the new memory location).
x
is a
CppAD::vector<Scalar>
object
x.data()
returns a pointer to a
Scalar
object such that for
0 <= i < x.size()
,
x[i]
and
x.data()[i]
are the same
Scalar
object.
If
x
is const, the pointer is const.
If
x.capacity()
is zero, the value of the pointer is not defined.
The pointer may no longer be valid after the following operations on
x
:
its destructor,
clear,
resize,
push_back,
push_vector,
assignment to another vector when original size of
x
is zero.
<cppad/vector.hpp> also defines the class
CppAD::vectorBool.
This has the same specifications as CppAD::vector<bool>
with the following exceptions:
vectorBool conserves on memory
(on the other hand, CppAD::vector<bool> is expected to be faster
than vectorBool).
s = vectorBool::bit_per_unit()
returns the size_t value
s
which is equal to the number of boolean values (bits) that are
packed into one operational unit.
For example, a logical or
acts on this many boolean values with one operation.
vectorBool.
CppAD::vectorBool output operator
prints each boolean value as
a 0 for false,
a 1 for true,
and does not print any other output; i.e.,
the vector is written a long sequence of zeros and ones with no
surrounding {, } and with no separating commas or spaces.
x
has type vectorBool
and
i
has type size_t,
the element access value
x[i]
has an unspecified type,
referred to here as
elementType
, that supports the following
operations:
elementType
can be converted to bool; e.g.
the following syntax is supported:
static_cast<bool>( x[i] )
elementType
supports the assignment operator = where the
right hand side is a bool or an
elementType
object; e.g.,
if
y
has type bool, the following syntax is supported:
x[i] = y
elementType
also has type
elementType
.
Thus, if
z
has type bool, the following syntax is supported:
z = x[i] = y
thread_alloc)
to the current thread.
CppAD::vector<double> x(3);
size_t i;
for(i = 0; i < 3; i++)
x[i] = 4. - i;
std::cout << "x = " << x << std::endl;