我正在研究一个多维数组类(省略复杂/不相关的细节)。我将数据存储为以行主顺序存储的线性数组。我需要创建一个迭代器,它可以按列主顺序迭代数组。鉴于数据以行主要顺序存储,行主迭代器可以简单地将索引增加到数组中。但是,我不确定如何实现列主迭代器。我猜我有一个公式可以用来计算索引但是无法在任何地方找到它或者自己导出它。重新排列数据不是一个选项,因为无论我需要两个迭代器。
答案 0 :(得分:2)
last_idx = width * height - 1;
if(pos == last_idx)
{
end;
}
else {
pos += width;
if(pos > last_idx) pos -= last_idx;
}
答案 1 :(得分: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
答案 2 :(得分:0)
给定数组的维度,您可以创建映射表并让迭代器迭代它。
array[mapping_table[i]]