在类中初始化空数组

Initialize empty array in class

本文关键字:数组 初始化      更新时间:2023-10-16

我刚刚尝试过:

class Test
{
public:
        int iArray[][];
}

。这不可能吗?我必须设置一个常量值吗?

喜欢:

class Test
{
public:
       const int iArray[5][4];
}

我想稍后定义 [x][y],只需在那里放置位置即可。否则它不会是"动态的",我不想使用向量,因为我希望能够通过"X"和"Y"访问值。

我认为实现这一目标的更好方法是使用指针。你可以这样做。

#include <cstdlib>
#include <iostream>
using namespace std;
class PointerTest {
    private:
        int** array;
        int x, y;
    public :
        void setValue(int row, int col,int value);
        int getValue(int row, int col);
        PointerTest(int row, int col);
       ~PointerTest() {
    for(int i=0;i<x;i++) {
        delete array[y];
    }
        }

};
PointerTest::PointerTest(int row, int col) {
    x=row, y=col;
    for(int i=0;i<row;i++) {
        *array=new int[col];
    }
}

void PointerTest::setValue(int row, int col, int value) {
    *(array[row])=value;
}
int PointerTest::getValue(int row, int col) {
    return *(array[row]);
}
int main(int argc, char *argv[])
{
    PointerTest* t=new PointerTest(4,5);
    t->setValue(0,0,464);
    cout<<"The value in array: "<<t->getValue(0,0)<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

怎么样

tempalte <int N1, int N2> class Test
{
public:
  int iArray[N1][N2];
};

把一个 std::vector 放在一个向量中怎么样?

std::vector< std::vector< const int > > iArray;
没有

太多理由在C++中使用"普通"数组。

如果您想稍后决定int iArray[][];大小,则可以使用 vector< vector<int> > iArray; .

另一种方法是使用嵌套new[],这有点复杂。

不,这是不可能的。但是你可以在你的类中有一个指针,比如

int **ptr;

然后在构造函数中或为您的数组分配内存的位置

ptr = (int **)malloc( the size you want );

或C++中的"new[]"运算符。

但是如果你正在使用C++..最好的方法是使用:

std::vector< std::vector< int >> array;
class Test
{
public:
  Test()
  {
    iArray = new int*[5];
    for(int i = 0; i < 5; i++)
      iArray[i] = new int[4];
  }
  ~Test()
  {
    for(int i = 0; i < 5; i++)
      delete[] iArray[i];
    delete[] iArray;
  }
  int** iArray;
};

将允许您在运行时分配一个 2d int 数组(在本例中它是 5x4),但老实说,我会使用其他一些海报指出的向量,您无需担心之后释放内存就像使用 new 一样。