C++ if检查和while检查之间是否存在速度差

C++ if检查和while检查之间是否存在速度差,c++,performance,if-statement,while-loop,C++,Performance,If Statement,While Loop,我正在解决一个问题,其中有一个主while循环,条件为int I=0;从性能角度来看,差异可以忽略不计。任何合适的编译器都会根据优化设置将代码的两个片段转换为几乎相同的程序集 从设计的角度来看,首先使用两个循环或嵌套循环和if-inside循环是没有意义的。因为您可以很容易地在一个循环中重写您的条件 当涉及到性能比较问题时,首先要做的是自己对代码进行基准测试。是一个很好的网站,可以检查不同代码和编译器产生的汇编差异 但实际上,除非您使用的是非常特定的软件和硬件,无法承受几个时钟周期的延迟,否则这

我正在解决一个问题,其中有一个主while循环,条件为int I=0;从性能角度来看,差异可以忽略不计。任何合适的编译器都会根据优化设置将代码的两个片段转换为几乎相同的程序集

从设计的角度来看,首先使用两个循环或嵌套循环和if-inside循环是没有意义的。因为您可以很容易地在一个循环中重写您的条件

当涉及到性能比较问题时,首先要做的是自己对代码进行基准测试。是一个很好的网站,可以检查不同代码和编译器产生的汇编差异


但实际上,除非您使用的是非常特定的软件和硬件,无法承受几个时钟周期的延迟,否则这种优化还为时过早。除非您非常了解自己的平台和代码,否则编译器将在生成快速汇编方面胜过您。只需专注于获得正确且可读的代码。

如果元素中的任何一个为偶数,则外部while循环似乎将变得无限大,i将不会递增。无限循环的性能如何?

是什么阻止您自己测试它?这取决于编译器和优化级别。在这两种情况下,编译器都可以用int i=1000替换整个代码。您可以使用来测试许多不同的编译器What's vector?这两个代码段不完全相同,因此性能比较毫无意义``temp[i]%2`不检查我是否古怪,但检查temp[i]是否古怪。我投票结束这个问题,因为它是基于一个微不足道的误解。
int i=0;
vector<int> temp(1000,1);
while(i<temp.size())
{
   while(i<temp.size()&&temp[i]%2!=0)
  {
    i++;
  }
}

int i=0;
vector<int> temp(1000,1);
while(i<temp.size())
{
   if(i<temp.size()&&temp[i]%2!=0)
  {
    i++;
  }
}