一个循环比几个好吗?

时间:2017-04-02 19:27:57

标签: c++ performance

我一直致力于BigInteger的实施,当我考虑添加解决方案时,我决定采用更清洁的方法,其中考虑在功能中添加相应的数字和"正常化&# 34;他们以后。如下例所示

  

999 999 + 111 111
  = 10 10 10 10 10 10(添加后的值)
  = 1 111 110(归一化后的值)

但从那时起,我一直在想它是如何影响该计划的效率的。有几个循环做小事情,每个循环通常比一个大的嵌套循环更快地工作吗? 例如,使用

int a[7]={0,9,9,9,9,9,9};
int b[7]={0,1,1,1,1,1,1};
int c[7];

是吗,

for(int q=0; q<7; ++q){
    c[q]=a[q]+b[q];
    if(c[q]>9){
        c[q-1]=c[q]/10;
        c[q]%=10;
    }
}

比这更好

for(int q=0; q<7; ++q){
    c[q]=a[q]+b[q];
}
for(int q=0;q<7;++q){
    if(c[q]>9){
        c[q-1]=c[q]/10;
        c[q]%=10;
    }
}

那么更大的循环呢,每次迭代都要经历更多的事情?

UPD。
有人建议我测量两个例子的表现时间。对于两个循环,平均时间(对于100mil。元素)~4.85sec。一个循环~3.72秒

1 个答案:

答案 0 :(得分:0)

很难说这两种方法中哪一种更有效。它可能因C ++编译器供应商和单个供应商(从编译器的版本到版本)而异。

底线是:

  1. 除非你做基准测试,否则你永远不会知道。

  2. 像往常一样,几乎可以肯定无论如何都无关紧要,在很多情况下,你很可能过分担心性能,就像绝大多数程序员一样。

    < / LI>
  3. 在一天结束时,重要的是更具可读性和更易维护的内容。代码可维护性 比保存时钟周期更重要。

  4. 如果你决定遵循“更具可读性”的明智之路,请记住不同的人发现不同的东西更具可读性。例如,当我阅读代码时,我个人讨厌意外,所以我会非常恼火地阅读你的第一个循环,它允许十进制数字接收0-9范围之外的错误值,但后来才发现你最终在补救与另一个循环。