何时在for循环中应用预减量
When is pre-decrement applied in a for loop?
我正在尝试实现一个使用某种C风格伪代码指定的算法。
该算法的大部分是for
循环:
for (i = 20;i > 0;i -= 2)
{
//...snip
}
据称,循环运行十次:
整个系列的修改是一系列10个相同的双回合。
我已经将算法移植到我自己的语言中,但我的结果与测试向量不匹配。因此,我正试图找出C语言的细节,以找出我可能做错了什么。
也许我的代码与测试向量的结果不匹配的原因是它应该只运行九次:
| i | i -= 2 | i > 0 | Perform iteration |
|----|--------|-------|-------------------|
| 20 | 18 | Yes | Yes - 1 |
| 18 | 16 | Yes | Yes - 2 |
| 16 | 14 | Yes | Yes - 3 |
| 14 | 12 | Yes | Yes - 4 |
| 12 | 10 | Yes | Yes - 5 |
| 10 | 8 | Yes | Yes - 6 |
| 8 | 6 | Yes | Yes - 7 |
| 6 | 4 | Yes | Yes - 8 |
| 4 | 2 | Yes | Yes - 9 |
| 2 | 0 | No | No |
如果我从逻辑上读取if
语句,它只执行了九次。
为什么他们说它运行十轮,但随后使用20作为初始值,仍然存在困惑。
我尝试复制我看到的逻辑(执行次数比文档中少一次),但我的结果仍然不匹配。不幸的是,我无法访问任何函数代码来将我的结果与已知的良好实现进行比较。所以我可能找错树了。
我是不是找错树了?
for
条件的第三部分在迭代后执行。
循环运行10次,对于每次迭代的主体,i
为20、18、16、14、12、10、8、6、4、2。
for循环执行"初始化、测试、正文、增量、测试、主体、增量、检测、主体等"。在第一次测试之前不应用增量。
顺便说一句,如果你想从for循环中的最后一个元素到第一个元素,但又不想出现难看的:
for (let i = arr.length - 1; i >= 0; i--)
您可以使用:
for (let i = arr.length; i-- > 0;)
示例:
const arr = ['a', 'b', 'c'];
for (let i = arr.length; i-- > 0;) {
console.log(`arr[${i}] is: ${arr[i]}`);
}
如果您在这里使用预减量,那么最后一次迭代(它是数组的第一个元素)就会丢失:
const arr = ['a', 'b', 'c'];
for (let i = arr.length; --i > 0;) {
console.log(`arr[${i}] is: ${arr[i]}`);
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 试图在visual studio上用C++创建一个桌面应用程序
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- 如何在Visual Studio c++ for Linux平台中编写GTK应用程序
- 获取stacktrace for Crash,而无需在调试器中运行该应用程序
- 在 qt 控制台应用程序中未定义对 'vtable for myObj' 的引用 - 信号和插槽
- Qt for Android:Jni - 不幸的是,应用程序已停止
- 我可以在 Windows for Linux 平台中创建应用程序吗?
- 如何使用 XAML for GUI 创建 C++(/CX ?) _DESKTOP_ Windows 8 应用程序
- CI for Qt 应用程序:使用不同的 Qt 版本构建
- 何时在for循环中应用预减量
- MFC 应用程序 Dialog基于使用 propertyPage,DoModal() for a CDialog 不打开任何对话框
- 如何存储和加载 cacerts.pem for gSoap-OpenSSL Android 应用程序
- Visual Studio 2012 for windows 8未显示win32控制台应用程序选项
- md5.h文件未找到错误Xcode 7 for Mac应用程序
- 应用程序一直接收分段错误-除非我添加一个for循环