[comp.lang.c++] multi-dimensional vector

ping@cubmol.BIO.COLUMBIA.EDU (Shiping Zhang) (09/05/89)

The following is a one-dimensional vector (very simple)

class intv {
    int sz;
    int *v;
public:
	intv();
        ~intv();
    void set_size(int);
    int& operator[](int);
};

intv::~intv()
{
    delete v;
}

intv::intv()
{
    sz=0;
    v = NULL;
}

void intv::set_size(int len)
{
    int *t=new int[len];
    for(long i=0;i<sz;i++){t[i]=v[i];}
    delete v;
    v=t;
    sz=len;
}

int& intv::operator[](int i)
{
    if(i<0){cerr << "Negative index of vector\n";exit(0);}
    if(i>=sz) {
	set_size(sz+LENGTH); // LENGTH is a constant
    }
    return v[i];
}

// an example of using intv
#define LENGTH 5;
#include <stream.h>
#include "intv.h"

main()
{
    intv a1;
    for(int i=0;i<10;i++)
        a1[i]=i;
    for(i=0;i<20;i++)
        cout << a1[i]*2; //a1 can be used without worrying its rang
}
    
Now the question is if there is a way to define a multi-dimensional
vector which can be used freely without concern about boundry,
for example, as following:

    //...

    // suppose intmv is defined as a vector, like intv above
    intmv a2[4][4]; // now define a 2d array of intmv ??? 
    int i,k;

    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            a2[i][k][i*4+k]=i*k; // a2 being used freely
                                 // without checking the rang of 
                                 // its 3rd dimemsion ???

Is this possible or legal? If yes, how to define intmv?
I appreciate any help about this matter. Thanks.

-ping