0

私は多次元配列クラスに取り組んでいます (複雑な/無関係な詳細を省略しています)。行優先順で格納された線形配列としてデータを格納しています。列優先順で配列を反復処理できる反復子を作成する必要があります。データが行優先順で格納されている場合、行優先反復子は単純にインデックスを配列にインクリメントできます。ただし、列優先イテレータを実装する方法がわかりません。インデックスを計算するために使用できる数式があると思いますが、どこにも見つけられなかったり、自分で導出したりできませんでした。両方のイテレータが必要であるため、データの再配置はオプションではありません。

4

3 に答える 3

2
last_idx = width * height - 1;

if(pos == last_idx)
{
    end;
}
else {
    pos += width;
    if(pos > last_idx) pos -= last_idx;
}
于 2012-12-20T21:41:00.807 に答える
0

配列の次元を指定すると、マッピング テーブルを作成し、イテレータでそれを反復させることができます。

array[mapping_table[i]]
于 2012-12-20T21:50:12.217 に答える
0
// Example
const int ROWS = 4;
const int COLS = 5;

// Initial
int row = 0;
int col = 0;

// Iteration
row += 1;
col += row / ROWS;
row %= ROWS;

// Index into your array
row * ROWS + col

// Termination
row * ROWS + col < ROWS * COLS
于 2012-12-20T21:41:11.227 に答える