1

我刚刚尝试过:

class Test
{

public:
        int iArray[][];

}

……这不可能吗?我必须设置一个恒定值吗?

喜欢:

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

我想稍后定义 [x][y],只要有展示位置。否则它不会是“动态的”,我不想使用向量,因为我希望能够通过“X”和“Y”访问值。

4

6 回答 6

4

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

#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;
}
于 2012-08-17T12:15:59.960 回答
3

将 std::vector 放入向量中怎么样?

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

在 C++ 中使用“普通”数组的理由并不多。

于 2012-08-17T11:46:26.753 回答
3

关于什么

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

?

于 2012-08-17T11:51:55.600 回答
2

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

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

于 2012-08-17T11:46:36.517 回答
2

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

int **ptr;

然后在构造函数或任何地方为您的数组分配内存

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

或使用 C++ 中的“new[]”-运算符。

但是如果您使用的是 C++ .. 最好的方法是使用:

std::vector< std::vector< int >> array;
于 2012-08-17T11:48:15.203 回答
1
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),但老实说,我会使用其他一些海报所指出的向量,您无需担心之后释放内存你用新做的。

于 2012-08-17T11:51:30.787 回答