# C++ Notes: Classes: Example: floatVector.cpp - Version 1

This program implements a few vector methods for Example: floatVector - Version 1.

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
    // fv1/floatVector.cpp  implements some of the floatVector methods
    //  Fred Swartz 2004-12-01

    #include <cstdlib>
    using namespace std;

    #include "floatVector.h"

    //====================================================== constructor
    floatVector::floatVector() {
        _capacity = 0;
        _size = 0;
        _data = NULL;
    }//end constructor

    //======================================================= destructor
        // free space allocated for the array
    floatVector::~floatVector() {
        delete [] _data;
    }

    //=============================================================== at
        // Return element at given position.
    float& floatVector::at(int position) const {
        return _data[position];
    }

    //============================================================= back
        // Return reference to last element.
    float& floatVector::back() const {
        return _data[_size-1];
    }

    //========================================================= capacity
        // Return the current storage capacity.
    int floatVector::capacity() const {
        return _capacity;
    }

    //======================================================== push_back
        // Add item to end of the vector, expand if necessary.
    void floatVector::push_back(float item) {
        if (_capacity <= _size) {
            // Start with capacity for 10 elements.
            // Expand by doubling each time.
            reserve(_capacity>0 ? 2*_capacity : 10);
        }
        _data[_size] = item;
        _size++;
    }

    //============================================================= size
        // Return number of data elements.
    int floatVector::size() const {
        return _size;
    }

    //============================================================ clear
        // Remove all data.  For floats this is as simple
        // as resetting the size.  It would also be possible
        // to delete the allocated memory, but the memory
        // is left as it is in anticipation of being used again.
    void floatVector::clear() {
        _size = 0;
    }

    //========================================================== reserve
        // Insure requested capacity.
    void floatVector::reserve(int cap) {
        if (cap > _capacity) {
            // This requires an expansion.
            float *new_data = new float[cap]; // allo new array.
            if (_capacity > 0) {
                // There is a previous allocation to copy and delete.
                for (int i=0; i<_size; i++) {
                     new_data[i] = _data[i];
                }
                delete [] _data;   // Deallocate old array.
            }
            _capacity = cap;       // Set new capacity.
            _data = new_data;      // Point to new array.
        }
    }