2016-11-20 63 views
1

有沒有可能從循環函數內返回多個值,沿東西這行:是否有可能從函數的循環中返回許多值? C++

float MyFunc(float First, float Second) 
{ 
    while (First < Second) 
    { 
     First++; 
     return First; 
    } 
} 

然後能夠即打印出不同的值,因爲他們回來了?

(我明白這不是一個很好的方法去做任何事情,但我只是好奇,似乎無法找到這個具體的好答案,也許我只是不夠努力)

+0

存儲和回用向量。 –

+0

你所尋找的是[協同程序(http://stackoverflow.com/questions/121757/how-do-you-implement-coroutines-in-c)。它們不是標準的一部分,但有計劃將它們包含在C++ 17中。 – sygi

+1

您可以返回更復雜的數據類型,或通過引用傳入數組/矢量並修改它。 – Fang

回答

2

隨着協同程序(Visual Studio的下工作2015年更新3)它是這樣的:

generator<float> MyFunc(float First, float Second) { 
    while (First < Second) { 
     First++; 
     co_yield First; 
    } 
} 

然後,你可以寫

for (auto && i : MyFunc(2,7)) { std::cout << i << "\n"; } 

有一說起這個就的Youtube:https://www.youtube.com/watch?v=ZTqHjjm86Bw

看到這裏正是你的例子:https://youtu.be/ZTqHjjm86Bw?t=40m10s

如果你不想等待協同程序,看看了boost ::範圍圖書館。

或實現迭代器自己種-的

struct counter { 
    counter (int first, int last) : counter {first, last, first} {} 
    counter begin() const { return counter {first, last, first}; } 
    counter end() const { return counter {first, last, last}; } 
    int operator++() { ++current; } 
    int operator*() const { return current; } 
private: 
    counter (int first, int last, int current) 
    : first (first), last (last), current (current) 
    {} 
    int first, last, current; 
}; 

bool operator != (counter a, counter b) { return *a != *b; } 

int main() { 
    for (auto && i : counter {2,5}) { std::cout << i << "\n"; } 
    return 0; 
} 
1

你可以返回一個向量。

std::vector<float> MyFunc(float First, float Second) 
{ 
    std::vector<float> Result; 
    while (First < Second) 
    { 
     First++; 
     Result.push_back(First); 
    } 
    return(Result); 
} 
0
  • 雖然你不能回到像有幾種方法可以做到這 。首先,將所有結果放入數組或向量中,最後返回 。但是,這並不意味着在他們返回的時候將它們打印出來 。
  • 你可以稱之爲循環內的打印功能,這將確保他們立即打印,然後在年底返回的載體。但是這看起來並不像你想要的那樣。
  • 你也可以使用多線程嘗試的東西。將結果添加到某種形式的併發隊列中,然後讓另一個線程從隊列中處理元素並將其打印出來。這與我想要的最接近,但是要複雜得多。
0

如果我已經正確理解了你的疑難問題,你可以做這樣的事情,並打印你的數組;

std::vector<float> MyFunc(float First, float Second) 
    { 
    std::vector<float> arr(50); 
    int i=0; 
     while (First < Second) 
     { 
      First++; 
      arr[i]=first; 
      i++; 
     } 
    return arr; 
    } 
+0

請改變它以使用'std :: vector '而不是浮點數組。 – Striezel

+0

editted,希望它有幫助 –

相關問題