2017-10-13 5 views
-2

私は、ループ内で作成された値をそのループの外側で使用する最良の方法を知りたいと思います。私はそれは、グラフをプロットし、唯一の「yAxe」の値を必要とされる別の関数に「ループ」しているように、その「new_a」を使用したいと思いますループ関数内で作成された値の使い方は?

void Loop(int a) 
{ 
    // recursion loop execution 
for (int i = 0; i < 10; i++) 
{ 
    int new_a = a + i; 
} 
} 

:私は、例えば機能を持っています。そのような:

int main() 
{ 
int a = 5; 
plot (x,Loop(int a); 
} 

私は、ループの値を持つ配列を作成することができます知っているが、私はそれらを格納するために、大きなplottingsのためにあまりにも多くのメモリになりたくありません。

+1

のみ 'new_a'を印刷しなければなりません'for'ループの中に存在するので、値をどこかに格納する必要があります(また、関数から外部に使用できるように' return'する) – UnholySheep

+0

おそらく関数オブジェクトa.k.a. a * functor *の使用を検討するべきでしょうか?オーバーロードされた 'operator()'関数を通してオブジェクトが "呼び出される"たびに変更される状態を保持することができます。 –

+0

実行中に 'a'の値をプロットしたり、読み込み専用(入力)パラメータですか? –

答えて

0

ローカル変数は、そのスコープが終了すると破棄されます。たとえば、コードnew_aは、forループが終了すると破棄され、関数が終了するとaが破棄されます。私はあなたが思い出を気にするなら、心配しないでください。

0

私が正しく理解していれば、Loop(例えばLoop(a)のような)を複数回呼び出す必要があり、それぞれの呼び出しでループの次の「反復」を取得する必要がありますか?

C++にはcontinuationsがないと簡単でした。代わりに、クラスやオブジェクト、演算子のオーバーロードを使用してエミュレートできます。

class LoopClass 
{ 
public: 
    LoopClass(int initial_value = 0) 
     : current_value{initial_value} 
    { 
    } 

    int operator()(int a) 
    { 
     return a + current_value++; 
    } 

private: 
    int current_value; 
}; 

それはそのようなものとして使用することができる:例えば

LoopClass Loop; // The value initialized with zero 

int a = 5; 
std::cout << "First call : " << Loop(a) << '\n'; 
std::cout << "Second call: " << Loop(a) << '\n'; 

上記のコードは、プログラムに入れた場合、

 
First call : 5 
Second call: 6 
関連する問題