2012-04-04 6 views

答えて

0

あなたが実行するたびにlenはしたくない場合は、次の

int length = len(arr); 

for i = 0; i < length; i++ { 
    ... 
} 
+0

それは問題ではありませんでした。 – delnan

1

はい、LEN()は反復ごとに呼び出されます。代わりに単純な変数を使用するのと同じです。

for(i=0 ; i< a; i++) 

それはあなたがa半ばランの値を変更することができますお勧めしませんが。

2

言語定義(ここではC/C++を使用していると仮定しています)では、毎回呼び出される必要があります。 他の回答で示唆されているように、この最適化を自分で行う必要があります。コンパイラは、一般に、len()関数の呼び出しに副作用があるかどうか、または呼び出しごとに同じ値を返すかどうかを知ることができないため、一般にループから取り出すことはできません。 len()が何をするかを知っているので、最適化を実行できます。

+2

は、最終結果が毎回呼び出されたのと同じであるようには十分ではありません。 – alvin

1

各反復中に変更されない場合。ループ不変量と呼ばれます。 ループ不変量は、ループ本体の上に吊り上げることができます(単語であることができます)。 しかし、それを正確に行う必要はありません。 関数呼び出しの場合、値がループ不変であるかどうかをコンパイラが判断することは困難です。それがインライン関数であれば、理論的にはループ不変量を決定することが可能である。特定のコンパイラが実際にこれを行うかどうかはわかりません。

は、それぞれが異なっこれを処理できることを、コンパイラの何千もあります