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
// 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 回答
0

给定数组的维度,您可以创建映射表并让迭代器对其进行迭代。

array[mapping_table[i]]
于 2012-12-20T21:50:12.217 回答