我有两个相关的问题,一个是一般性的,一个是针对我正在从事的项目的具体问题。
- 一般来说,如果我有一个包含大量迭代(数百万次)的循环,并且某些部分代码在特定条件下执行,那么让一个带有多个条件语句的循环还是多个没有它们的循环更好(更有效)。例如。
示例 1:
while (something())
{
// some common code
if (condition_a)
// some code
if (condition_b)
// some code
// some more common code
}
示例 2:
if (condition_a && condition_b)
{
while (something())
{
// some common and specific code
}
}
else if (condition_a)
while (something()) //..
else if (condition_b)
// Another loop
else //...
似乎示例 2 会以冗余为代价产生更高效的代码,因为条件只检查一次而不是数百万次。如果通用代码很大或者有很多可能的情况,这似乎是非常多余的。
现在到我的具体问题。我有一个从文件中读取点并将它们插入数据结构的函数。它看起来像这样:
while (reader->read_point) { // 做一些事情 // 插入点 }
问题是有几个函数可以根据用户提供的标准来读取一个点。例如 read_point_inside_circle()、read_point_inside_rectangle() 等。
理想情况下,我想使用函数指针来事先决定正确的函数,但是我认为这是不可能的,因为 reader 是 Reader 类的一个实例(如果有可能以某种方式解决我的所有问题)。
在这种情况下,如果我有多个仅在条件上有所不同的循环,或者我应该使用多个 if 语句来避免冗余代码,那会更好,例如。
for(;;)
{
if (read_every_point)
if(!reader->read_point())
break;
else if (read_inside_circle)
if(!reader->read_inside_circle())
break;
else if // ...
}