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;

もう1つの方法は、ネストされたを使用する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;
};

実行時に2dint配列を割り当てることができます(この例では5x4です)が、正直なところ、他のポスターで指摘されているようにベクトルを使用します。後でメモリを解放することを心配する必要はありません。あなたは新しいものを使用して行います。

于 2012-08-17T11:51:30.787 に答える