c++ - 循环、功能设计和效率 : two questions

标签 c++ loops function-pointers performance

我有两个相关问题,一个是一般性的,一个是针对我正在从事的项目的。

  1. 一般来说,如果我有一个包含大量迭代(数百万次)且某些代码部分在特定条件下执行的循环,那么一个循环包含多个条件语句更好(效率更高)还是多个循环没有它们更好(更有效)。例如。

示例 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 会以冗余为代价产生更高效的代码,因为条件只检查一次而不是上百万次。如果通用代码很大,或者有很多可能的条件,这似乎非常多余。

  1. 现在谈谈我的具体问题。我有一个从文件中读取点并将它们插入数据结构的函数。它看起来像这样:

    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 // ...
}

最佳答案

回答您的具体问题:读取文件所花费的时间将超过在 if/else 中花费的时间。写任何更具可读性的东西。这通常更有效,并且在证明它是瓶颈之前不要对其进行优化。

回答你的一般问题:取决于很多事情,现代编译器非常擅长独立于你的直觉高效地做事。因此,在您拥有针对特定编译器和体系结构的工作代码之前,这是一个理论讨论。

关于c++ - 循环、功能设计和效率 : two questions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11019157/

相关文章:

类函数中的c++ char数组输出

C++ 获取 std::variant 当前帮助的类型的 std::typeindex

loops - 循环时,.iter() 与引用 (&) 有何不同?

java - Java 中的循环和字符串

c++ - 从 JIT 代码调用方法

c 函数指针

c++ - 我将如何创建一个函数来确定用户输入是否是 vector 中包含的单词之一

c++ - 防止 Boost Spirit Symbol 解析器过早接受关键字

language-agnostic - 非阻塞事件循环是如何工作的?

c++ - 保存和加载函数指针到文件