0

int GRID[10][20]として作成された2D配列グリッドがあります。私がやりたいのは、最後の行GRID [LAST] [ALL]を削除し、配列の先頭に空白行を挿入することです。運が悪かったので、これをグーグルで検索してみました。ありがとう

4

2 に答える 2

3

これはC++ではなく、Cです。これを行うことができます。

memmove( GRID[1], GRID, sizeof GRID - sizeof GRID[0] ); // shift the array
bzero( GRID, sizeof GRID[0] ); // zero out the first row

C ++を使用している場合は、次のようになります。

GRID.pop_back(); // remove the last row
GRID.push_front( std::vector< int >( 10 ) ); // add an initial row

またはこれ(メモリの割り当てとサイズパラメータへの依存を回避します):

rotate( GRID.begin(), GRID.end()-1, GRID.end() ); // shift the array
fill( GRID[0].begin(), GRID[0].end(), 0 ); // zero out the first row

さらに、C ++では、ベクトルの代わりにキューを使用できます。これは、必要に応じて表示されます。ただし、C ++では、多次元コンテナ(vectorまたはdeque)は、単一のメモリブロックに存在するCスタイルの配列配列とは異なり、事実上、配列へのポインタの配列、つまり不連続なメモリ構造です。

于 2009-09-13T14:28:39.617 に答える
1

配列は、固定サイズの静的構造です。探している種類のもの(挿入と削除を伴うインデックス可能な連続ストレージ)を取得するには、STLベクトルコンテナータイプを確認する必要があります。

于 2009-09-13T14:08:10.320 に答える