【问题标题】:Indexing a single dimensional array with a double for loop使用双 for 循环索引一维数组
【发布时间】:2016-04-06 11:24:23
【问题描述】:

这应该是一件简单的事情,我应该知道这一点,但我一无所知。

struct Coords {
    unsigned row;
    unsigned col;
};

Coords indexTable[256];

for ( unsigned row = 0; row < 16; ++row ) {
    for ( unsigned col = 0; col < 16; ++col ) {
        unsigned currIndex = ?
        indexTable[currIndex].row = something;
        indexTable[currIndex].col = something;
    }
}

当前指数的计算方式是什么? currIndex 与在单个 for 循环中遍历 [0,255] 相同。

【问题讨论】:

  • row * 16 + col,如果您有 NCOLS 列,则为 row * NCOLS + col
  • 例如,计算当前行开始的偏移量。为该行中的列添加偏移量。但这只是两种主要可能性之一,而且还有无数种不太自然的可能性。要获得正确的答案,您需要定义您希望 currIndex 成为什么。
  • 如果你搜索并发现相反的情况,你不认为你在做相反的事情吗?如果不是,请清楚说明您的问题。
  • 当您扫描数组时列索引变化最快时,Holt 的评论(以及我之前的评论)显示了如何计算 indexTable
  • 你在两个for循环中都增加colunsigned row = 0; row &lt; 16; ++col应该是unsigned row = 0; row &lt; 16; ++row

标签: c++ arrays for-loop


【解决方案1】:

由 Holt 和 Cheers 和 hth 提供。 - 来自 cmets 的 Alf,他们已经回答了这个问题。

currIndex =  row * 16 + col;

我之前确实有这个,但是当我做数学验证时,我在数学上犯了一个错误,所以我最终放弃了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 2020-11-20
    • 2015-03-15
    • 2019-06-02
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多