我自己类型的多维数组

C++: multidimensional array of my own type

本文关键字:数组 类型 我自己      更新时间:2023-10-16

嗨,我正在写一个简单的程序,基本上是任何数据类型的3D数组模板。它要求稍后在main函数中可以直接访问数组的元素(即a[1][2][3] = 3;可无警告使用)。以下是目前为止的内容:

template <class T>
class CArray3D {
public:
    T*** tempArray;
CArray3D(int x,int y,int z){
    tempArray = new T**[x];
    for(int i=0;i<x;i++) {
        tempArray[i] = new T*[y];
        for(int j=0;j<y;j++) {
            (tempArray)[i][j] = new T[z];
        }
    }
};
T& operator[](const int x,const int y,const int z);
};

template <class T>
T& CArray3D<T>::operator[] (const int x,const int y,const int z) {
    return tempArray[x];
}

但现在我得到这个错误:重载操作符[]必须是一个二进制操作符(有4个参数)。我试着把它改成

operator[][][](const int x, const...) 

,但是我得到了错误:operator[]不能是变量或数据成员的名称。所以我不知道现在该怎么做。谢谢你!

编辑:

给出了main函数(是的,这是一个作业):

int main() {
CArray3D<int> a(3,4,5);
int No = 0;
for(int i=0;i<3;i++)
    for(int j=0;j<4;j++)
        for(int k=0;k<5;k++)
            a[i][j][k] = No++;
for(int i=0;i<3;i++)
    for(int j=0;j<4;j++)
        for(int k=0;k<5;k++)
            cout << a[i][j][k] << ",";
return 0;
}

这里我要用[I][j][k]

评论中提到的"proxy class"是最标准的方法。

然而,因为这只是你的作业,如果你只是想在main()中使用它,那么您可以只返回T**

T** operator[](const int x) {
    return tempArray[x];
}