使用size_t值以反方向遍历向量

mmo*_*jab 4 c++ vector

我想遍历相反方向的向量值.如您所知,向量的大小为size_t.当我使用以下代码时:

for(size_t r=m.size()-1; r >= 0; r--)
{
    x[r] = f[r];
    for(size_t c = r+1; c < m.size(); c++)
    {
        x[r] -= m[r][c] * x[c];
    }
}
Run Code Online (Sandbox Code Playgroud)

我将超出向量的范围,因为在递减r = 0之后r将变为4294967295.

我没有改变r的类型,因为在我的项目中,我将警告视为错误,因此它应该是size_t或者我应该将它转换为不感兴趣的.

Cod*_*dor 6

如果您确实想要size_t用于索引,则可以按如下方式制定循环.

for(size_t r = m.size(); r > 0; r--)
{
    x[r-1] = f[r-1];
    for(size_t c = r; c < m.size(); c++)
    {
        x[r-1] -= m[r-1][c] * x[c];
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上你会迭代m.size()1并通过在循环内移动来补偿; 但这个解决方案可能有点难以理解.在这个问题中,提出的解决方案是使用a reverse_iterator,它可以被视为索引的合适抽象.整个主题在这个问题中得到了更深入的介绍.

  • DRY:`auto r1 = r - 1;`并在循环中使用`r1`(或切换名称`r`和`r1`以使循环体更具可读性). (5认同)
  • @JamesKanze好笑; 它对你来说很模糊,它向我表达了意图.但我相信我们已经有了这个讨论. (4认同)
  • @Angew"auto"混淆时的一个很好的例子. (2认同)