これはしばらく私を悩ませました。私は大量のデータを保持するために大きなバッファを作っていることがよくあります。これは、次のデータセットのサイズが変わるたびに動的にバッファを割り当てたり割り当てを解除したりするのを避けるのに役立ちます。1D配列をC++で2D配列としてアクセス
たとえば、実際の有効サイズには大きすぎる配列がありますが、有用なデータの長さはわかります。
int amountOfData = 9;
char data1D[100] = some data that is only 9 bytes long stored in a 100 byte array
2次元配列インデックスを使用するこのデータセットで実行したいアルゴリズムがあります。だから私は、次のようにデータにアクセスできるようにする。このため
int xlength = 3;
int ylength = 3;
を:
cout << "I am accessing this data as a 2D array: " << data1D[0][1] << endl;
は、私は2次元配列のxlengthとylengthがあることを行っていることを知っているこのアルゴリズムのために言うことができます反復は、amountOfData = 9
です。ただし、長さは次の反復で異なる場合があります。つまり彼らはxlength = 4
とylength = 4
と与えられるかもしれませんamountOfData = 16
。
2D配列インデックスを使用して1D配列をキャストできるようにするために、何らかのキャストを行いたいとします。最初の1Dの長さはどれくらいの長さで、私の2D xlength
とylength
の長さがわかるので、new
またはmalloc
を使わずに簡単にできるはずです。最初の100バイトが有効なデータセット私に。
私がいることを実感:コンパイラは二次元のサイズを知らないため
char** data2d = (char**) data1D;
が動作しません。しかし、私はそれが実行時に何であるか知っている!
これが本来の理由は何ですか? 回避策はありますか? 何も分からないのですか?あなたの行/列の長さを知っている場合
[ベクトル](http://en.cppreference.com/w/cpp/container/vector)を参照してください。 –
どのような種類のデータをdata1Dで使用する予定ですか? – Amadeus
@Tomas Badan私は例として 'char'sを使用しましたが、' unsigned short'の2次元配列として 'unsigned char'sの1D配列にアクセスしたいときに、この問題の特定のケースが発生しました。 1Dアレイは、独自のカメラソフトウェアから吐き出されました。私は結果の画像に2Dピクセルデータとしてアクセスしたいと思います。 – dinkelk