使用size_t 0作为边界条件进行迭代

Mar*_*gen 14 c c++

使用size_t值和边界条件编写递减循环的"正确"方法是什么.示例错误实现:

for (size_t elemNum = listSize-1; elemNum >= 0; --elemNum) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

当它达到零时,它将环绕到最大值而不是作为边界条件.反向迭代循环是必要的.这似乎是一个问题,将有一个事实上的标准解决方案,但我找不到它是什么.

Mar*_*tos 19

最简洁的方法是使用后增量:

for (size_t i = listSize; i--;) ...
Run Code Online (Sandbox Code Playgroud)

  • 我最喜欢这个解决方案.只要理解其他注释中提到的"转到"运算符,我就可以更清楚地表达:`for(size_t i = listSize; i - > 0;){/*...*/} (2认同)

pmg*_*pmg 6

elemNum = listsize;
while (elemNum--) {
    /* work with elemNum varying from `listsize - 1` down to `0` */
}
Run Code Online (Sandbox Code Playgroud)

  • 为此,某些编译器支持特殊的“转到”运算符 `while (elemNum --> 0) { /* ... */ }`。 (2认同)
  • @Kerrek:我认为你的意思是所有符合标准的编译器:) (2认同)