2017-10-13 21 views
-2

我想知道哪一個是使用循環內創建的值的最佳方式,在該循環之外。我有比如函數:如何使用循環函數內創建的值?

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

我想使用「new_a」,因爲它正在其中繪製的圖表,只需要在「yAxe」價值的另一個功能「循環」。這樣的:

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

我知道我可以創建一個循環的值的數組,但我不希望來存儲它們和大plottings將太多的記憶。

+1

'只new_a'存在於'for'循環中,所以你需要將值存儲在某個地方(並且從函數返回它們以便在外部使用) – 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