4

arrarr[i][j] 経由でアクセスできる2 次元の int 配列を取得したいと思います。

私が理解している限り、そのint arr[10][15];ような配列を取得することを宣言できました。私の場合、サイズは可変ですが、私が理解している限り、配列のサイズがハードコードされていない場合、この構文は機能しませんが、のような変数を使用しますint arr[sizeX][sizeY]

最善の回避策は何ですか?

4

6 に答える 6

11

std::vectorベクトル (または新しい C++11 )を使用したくない場合は、std::arrayすべてのサブ配列を手動で割り当てる必要があります。

int **arr = new int* [sizeX];
for (int i = 0; i < sizeX; i++)
    arr[i] = new int[sizeY];

そしてもちろん、終わったら忘れないでくださいdelete[]

于 2011-11-28T10:03:34.853 に答える
1

c /c++は多次元配列をサポートしていません。しかし、それは配列の配列をサポートします:

    //simulate 2-dimension array with 1-dimension array
    {
        int x = 20;
        int y = 40;
        int * ar = new int(x*y);
        int idx_x =9;
        int idx_y=12;
        ar[idx_x + idx_y * x] = 23;
    }
    //simulate 2-dimension array with array of array
    {
        int x = 20;
        int y = 40;
        int**ar = new int*[y];
        for(int i = 0; i< y; ++i)
        {
            ar[i] = new int[x];
        }
        ar[9][12] = 0;      
    }
于 2011-11-28T10:16:10.783 に答える
0

C で解決策を探している場合は、次の Stack Overflow スレッドを参照してください: How do I work with dynamic multi-dimensional arrays in C? .

C++ が問題なければ、2D ベクトル、つまりベクトルのベクトルを作成できます。http://www.cplusplus.com/forum/general/833/を参照してください。

于 2011-11-28T10:02:51.170 に答える
0

配列構文ではできません。この言語では、コンパイル時の定数を使用して配列を作成する必要があります。

于 2011-11-28T10:03:17.770 に答える
0

fefe が言ったように、ベクトルのベクトルを使用できます。

#include<iostream>
#include<vector>
using namespace std;

int main()
{
        vector< vector<int> > vec;
        vector<int> row1;
        row1.push_back(1);
        row1.push_back(2);
        vector<int> row2;
        row2.push_back(3);
        row2.push_back(4);

        vec.push_back(row1);
        vec.push_back(row2);

        for( int ix = 0; ix < 2; ++ix)
            for( int jx = 0; jx < 2; ++jx)
                cout << "[" << ix << ", " << jx << "] = " << vec[ix][jx] << endl;

}
于 2013-08-21T08:26:06.807 に答える
0

C++ には可変長配列がありません。の使用を検討できますvector<vector<int> >。を使用してアクセスすることもできますarr[i][j]

于 2011-11-28T10:04:21.480 に答える