# Bounded Array Storage

## Bounded Array

#### Description

The templated class `bounded_array<T, N, ALLOC>` implements a bounded storage array. The bounded array is similar to a C++ array type in that its maximum size is bounded by N and is allocated on the stack instead of the heap. Similarly a `bounded_array` requires no secondary storage and ALLOC is only used to specify `size_type` and `difference_type`.

When resized `bounded_array` never reallocated the storage. It is therefore always efficient to resize a `bounded_array` but the size bound N must not be exceeded.

#### Example

    #include <boost/numeric/ublas/storage.hpp>

    int main () {
        using namespace boost::numeric::ublas;
        bounded_array<double, 3> a (3);
        for (unsigned i = 0; i < a.size (); ++ i) {
            a [i] = i;
            std::cout << a [i] << std::endl;
        }
    }

#### Definition

Defined in the header storage.hpp.

#### Template parameters

Parameter | Description | Default
--- | --- | ---
`T` | The type of object stored in the array. |
`N` | The allocation size of the array. |
`ALLOC` | An STL Allocator | std::allocator

#### Model of

Storage

#### Type requirements

None, except for those imposed by the requirements of Storage.

#### Public base classes

None.

#### Members

- The description does not describe what the member actually does, this can be looked up in the corresponding concept documentation, but instead contains a remark on the implementation of the member inside this model of the concept.
- Typography:
  - Members that are not part of the implemented concepts are in blue.

Member | Where defined | Description
--- | --- | ---
`value_type` | Container |
`pointer` | Container | Defined as `value_type*`
`const_pointer` | Container | Defined as `const value_type*`
`reference` | Container | Defined as `value_type&`
`const_reference` | Container | Defined as `const value_type&`
`size_type` | Container | Defined as `Alloc::size_type`
`difference_type` | Container | Defined as `Alloc::difference_type`
`iterator` | Container | Defined as `pointer`
`const_iterator` | Container | Defined as `const_pointer`
`revere_iterator` | Container | Defined as `std::reverse_iterator<iterator>`
`const_revere_iterator` | Container | Defined as `std::reverse_iterator<const_iterator>`
`bounded_array ()` | Storage | Creates an `unbounded_array` that holds zero elements.
`bounded_array (size_type size)` | Storage | Creates a uninitialized `bounded_array` that holds `size` elements. All the elements are default constructed.
`bounded_array (size_type size, const T& init)` | Storage | Creates an initialized `bounded_array` that holds `size` elements. All the elements are constructed from the `init` value.
`bounded_array (const bounded_array &c)` | Container | The copy constructor.
`~bounded_array ()` | Container | Deallocates the `bounded_array` itself.
`void resize (size_type size)` | Storage | Reallocates a `bounded_array` to hold `size` elements.
`void resize (size_type size, const T& t)` | Storage | Reallocates a `bounded_array` to hold `size` elements.
`size_type size () const` | Container | Returns the size of the `bounded_array`.
`const_reference operator [] (size_type i) const` | Container | Returns a `const` reference of the `i` -th element.
`reference operator [] (size_type i)` | Container | Returns a reference of the `i`-th element.
`bounded_array &operator = (const bounded_array &a)` | Container | The assignment operator.
`bounded_array &assign_temporary (bounded_array &a)` |  | Assigns a temporary. May change the array `a`.
`void swap (bounded_array &a)` | Container | Swaps the contents of the arrays.
`const_iterator begin () const` | Container | Returns a `const_iterator` pointing to the beginning of the `bounded_array`.
`const_iterator end () const` | Container | Returns a `const_iterator` pointing to the end of the `bounded_array`.
`iterator begin ()` | Container | Returns a `iterator` pointing to the beginning of the `bounded_array`.
`iterator end ()` | Container | Returns a `iterator` pointing to the end of the `bounded_array`.
`const_reverse_iterator rbegin () const` | Reversible Container | Returns a `const_reverse_iterator` pointing to the beginning of the reversed `bounded_array`.
`const_reverse_iterator rend () const` | Reversible Container | Returns a `const_reverse_iterator` pointing to the end of the reversed `bounded_array`.
`reverse_iterator rbegin ()` | Reversible Container | Returns a `reverse_iterator` pointing to the beginning of the reversed `bounded_array`.
`reverse_iterator rend ()` | Reversible Container | Returns a `reverse_iterator` pointing to the end of the reversed `bounded_array`.