我正在做一些作业,想知道是不是有太多嵌套的while循环。嵌套多个while循环有什么缺点吗?如果是这样的话,如何重构下面的代码片段呢?
下面的代码一次读取一行文件,解析由某些定义的分隔符分隔的字段,并在打印到控制台之前删除前导空格。
// Read the file one line at a time
while (fgets(lineStr, MAXLINELENGTH, fp) != NULL)
{
charPtr = strtok(lineStr, DELIMITERS);
// Loop until line is parsed
while (charPtr != NULL)
{
// Skip past leading whitespace
while (isspace(*charPtr))
charPtr++;
puts(charPtr);
charPtr = strtok(NULL, DELIMITERS);
}
}发布于 2012-04-26 06:54:13
唯一真正的缺点是可读性,对于这一点,没有任何硬性的规则……尽管超过3个nests通常会激怒其他任何与你合作的人。正如另一位发帖者所说,有时通过将循环转移到另一个函数来打破嵌套更好,但这里的内容对我来说是完全可读的-这是唯一真正的度量标准;纯粹的主观观点:)
发布于 2012-04-26 07:01:24
如前所述,这是相对主观的。但是,嵌套循环的方式可能会对代码产生直接的性能影响。考虑一下支持缓存的编程。也就是说,您希望以这样一种方式安排代码:处理器可以在需要下一块数据之前将其预取(即预测)到缓存中。这将允许更多的缓存命中和更快的内存访问时间。
请注意,这对于您的示例并不是特别重要,但是,如果您正在进行多次内存访问,这可能会显著提高或降低性能。如果您在以行为主的体系结构上以列方式遍历多维数组,则可能会有许多缓存未命中(请注意,缓存未命中在实时性方面是非常昂贵的)。
所以嵌套循环不一定不好,但它肯定会对性能产生明显的影响,特别是在一些任意数量的n循环之后。
https://stackoverflow.com/questions/10324890
复制相似问题