/*
 *  Size and Capacity
 *
 */

template <class T, class A = allocator<T> > class vector {
public:
    // ...
    // capacity:

    size_type size() const;                     // number of elements
    bool empty() const { return size()==0; }
    size_type max_size() const;                 // size of the largest possible vector
    void resize(size_type sz, T val = T());     // added elements initialized by val

    size_type capacity() const; // size of the memory (in number of elements) allocated
    void reserve(size_type n);  // make room for a total of n elements; don't initialize
                                // throw a length_error if n>max_size()
    // ...
};


/*
 *  Usage of size and capacity
 *
 */

class Histogram {
    vector<int> count;
public:
    Histogram(int h) : count(max(h,8)) {}
    void record(int i);
    // ...
};

void Histogram::record(int i)
{
    if (i<0) i = 0;
    if (count.size()<=i) 
        count.resize(i+i);      // make lots of room
    count[i]++;
}