CS50:For循环设计
CS50: For Loop Design
目前正在做 CS50 讲座,在第 2 周,从大约 56:45 开始观看此视频 (https://video.cs50.net/2016/fall/lectures/2?t=56m50s) 他提到应该将 strlen
函数移动到已初始化的for
循环的变量部分,而不是留在条件部分,因为将它留在条件部分会使计算机 运行 每次 for
循环时都执行 strlen
函数递增。
好的,我明白了,但是建议的解决方案——将其移至变量声明部分并不能解决问题,对吗?因为它仍在 for
循环中,所以看起来 strlen
函数在每次 for
循环迭代时仍在检查。
我错了吗?
“for()”循环的 'initialize' 部分只有 运行 一次。
for()
循环的 'conditional' 部分是每个循环迭代开始时的 运行。
for()
循环的 'step' 部分在每次循环迭代结束时 运行。
这就是为什么重复操作,比如调用 strlen()
应该移到初始化部分(应该设置局部变量的地方)
嗯,strlen函数不会在for循环中每次都被调用,因为我们在for循环之前存储了strlen的值,
它看起来像这样
`int n= strlen(s);
for(int i=0;i<n;i++)
{
code
}
`
一旦 strlen 的值存储在 n 中,计算机只需访问 n 而不是从 string.h 库中一次又一次地访问 strlen
希望这个答案对您有所帮助:)
目前正在做 CS50 讲座,在第 2 周,从大约 56:45 开始观看此视频 (https://video.cs50.net/2016/fall/lectures/2?t=56m50s) 他提到应该将 strlen
函数移动到已初始化的for
循环的变量部分,而不是留在条件部分,因为将它留在条件部分会使计算机 运行 每次 for
循环时都执行 strlen
函数递增。
好的,我明白了,但是建议的解决方案——将其移至变量声明部分并不能解决问题,对吗?因为它仍在 for
循环中,所以看起来 strlen
函数在每次 for
循环迭代时仍在检查。
我错了吗?
“for()”循环的 'initialize' 部分只有 运行 一次。
for()
循环的 'conditional' 部分是每个循环迭代开始时的 运行。
for()
循环的 'step' 部分在每次循环迭代结束时 运行。
这就是为什么重复操作,比如调用 strlen()
应该移到初始化部分(应该设置局部变量的地方)
嗯,strlen函数不会在for循环中每次都被调用,因为我们在for循环之前存储了strlen的值, 它看起来像这样
`int n= strlen(s);
for(int i=0;i<n;i++)
{
code
}
`
一旦 strlen 的值存储在 n 中,计算机只需访问 n 而不是从 string.h 库中一次又一次地访问 strlen 希望这个答案对您有所帮助:)