Vectors

Requires BOOST

Vectors offers four template classes. The StaticVector and the DynamicVector, are subclasses of std::tr1::array and std::vector respectively, and extend those types with arithmetic operators. They are meant as an alternative for std::valarray, that, for example, does not have iterators. The definitions are:
template <typename T, unsigned DIMS>
class StaticVector;
and
template <typename T>
class DynamicVector;
are the most common. There are similar Vectors whose values are kept in sorted order:
template <typename T, unsigned DIMS>
class StaticSortedVector
template <typename T>
class DynamicSortedVector

These Vectors can be mixed in most operations. There is a special case, StaticVector<bool> that, much like std::vector<bool> in the STL, behaves somewhat differently.

Interface

Common Interface of Vectors

There are two Vector types, StaticVector and DynamicVector. Their interfaces are almost identical. In the following table, substitute "Vector" with either one.

  value_type  
The type of the values in the vector.
  iterator  
The iterator type of this Vector
  const_iterator  
The const_iterator type of this Vector, for read-only access.
  Vector()  
Default Constructor
  Vector(Iterator first, Iterator last)  
Constructor, copies input from range (first, ..., last).
  template <typename U>
  Vector(const U &data)  
Copy-constructor, generalized to work with any container type or data type.
  iterator begin()  
As in any container.
  iterator end()  
As in any container.
  const_iterator begin()  
As in any container.
  const_iterator end()  
As in any container.
  void clear()  
Set all elements to zero.
  const Vector &operator=(const value_type value)  
Assign a value to every element of the Vector.
  template <typename Container>
  const Vector &operator=(const Container &data)  
Assignment operator, works with any container type.
  value_type &operator[] (unsigned index)  
Access one element.
  const Vector &
  operator{+ - * / %}=(const value_type that)  
Standard operator{+ - * / %}, element-wise applied with 'value'.
  template <typename Container>
  const Vector &
  operator{+ - * / %}=(const Container &that)  
Standard operator{+ - * / %}, applied with another container.
  unsigned size() const
The number of dimensions
  std::string to_string() const  
Returns a string-representation.

Specific Interface of StaticVector

  StaticVector(const value_type value)  
Construct a StaticVector and set all elements to 'value'.
  template <typename U>
  StaticVector<U, DIMS> convert() const  
Convert to another type.

Specific Interface of DynamicVector

  DynamicVector(const unsigned DIMS)  
Construct a DynamicVector with DIMS dimensions.
  DynamicVector(const unsigned DIMS, const T value)  
Construct a DynamicVector with DIMS dimension and set all elements to 'value'.
  void resize(const unsigned DIMS)  
Change the number of dimensions.

Specific Interface of StaticVector<bool>

Note that StaticVector<bool> does not support operator{+, -, *, /, %}.

  value_type  
Alias for type 'bool'
  register_type  
The type used to hold raw data internally.
  iterator  
Iterator for raw data.
  const_iterator  
Read-only iterator for raw data.
  StaticVector()  
Default Constructor
  template <typename Iterator>
  StaticVector(Iterator first, Iterator last)  
Constructs a StaticVector<bool>, fill it with either booleans (if the input range are of type "bool"), or with raw data (if the input range is of type "register_type").
  StaticVector(const std::string &hex)  
Constructs a StaticVector<bool> from a string in lower-case hexadecimal representation.
  iterator begin()  
An iterator to raw data of type "register_type".
  iterator end()  
An iterator to raw data of type "register_type".
  const_iterator begin()  
An iterator to raw data of type "register_type".
  const_iterator end()  
An iterator to raw data of type "register_type".
  void clear()  
Set all bit to zero.
  template <typename Iterator>
		void set(Iterator first, Iterator last)  
Fill with either booleans (if the input range are of type "bool"), or with raw data (if the input range is of type "register_type").
  void setElement(unsigned index, bool value)  
Set a bit to the given value.
  const StaticVector operator~() const  
Flip all bits.
  void flip()  
Flip all bits.
  void flip(const unsigned index)  
Flip bit at "index".
  unsigned count() const  
Return the number of bits set to 1.
  bool odd() const  
Returns true if an uneven number of bits set to 1.
  bool even() const  
Returns true if an even number of bits set to 1.
  const StaticVector &operator|=(const StaticVector &that)  
Apply element-by-element OR.
  const StaticVector &operator|=(const bool value)  
Apply OR to each element.
  const StaticVector &operator^=(const StaticVector &that)  
Apply element-by-element XOR.
  const StaticVector &operator^=(const bool value)  
Apply XOR to each element.
  const StaticVector &operator&=(const StaticVector &that)  
>Apply element-by-element AND.
  const StaticVector &operator&=(const bool value)  
Apply AND to each element.
  unsigned size()  
Returns the number of dimensions of the vector.
  std::string to_string()  
Returns a lower-case hexadecimal representation.

Common Interface of SortedVectors

There are two types of vectors that keep their contents in sorted order, so-called "SortedVectors". In the following table, read either "StaticSortedVector" or "DynamicSortedVector" for "SortedVector".

  value_type  
The type of the elements in the SortedVector.
  const_iterator  
A read-only iterator.
  SortedVector(const_iterator first, const_iterator last)  
Constructor that fill the SortedVector with values from the range "first" to "last".
  const_iterator begin() const  
Returns a const_iterator to the first element.
  const_iterator end() const  
Returns a const_iterator indicating the end of the SortedVector.
  const value_type operator[] (unsigned index) const  
  void set(const_iterator first, const_iterator last)  
Fill the SortedVector with values from the range "first" to "last".
  bool has(const value_type value) const  
Returns true if any element in the SortedVector is "value".
  unsigned size()  
Returns the number of dimensions of the SortedVector.
  const std::string to_string() const  
Returns a string-representation of the SortedVector.

Operators and Fuctions

  template <typename T, class TOther>
  Vector<T,...> crossProduct(const Vector<T, ...> &lhs, const TOther &rhs)  
Cross-product of vectors of 3 dimensions.
  template <typename T, class TOther>
  Vector<T,...> dotProduct(const Vector<T,...> &lhs, const TOther &rhs)  
Dot-product of vectors.

See Also