C++ 函数中的循环是否可以返回多个值?C++;
是否可以从函数中的循环返回许多值,如下所示:C++ 函数中的循环是否可以返回多个值?C++;,c++,function,loops,C++,Function,Loops,是否可以从函数中的循环返回许多值,如下所示: float MyFunc(float First, float Second) { while (First < Second) { First++; return First; } } float MyFunc(先浮后浮) { while(第一次
float MyFunc(float First, float Second)
{
while (First < Second)
{
First++;
return First;
}
}
float MyFunc(先浮后浮)
{
while(第一次<第二次)
{
第一++;
先返回;
}
}
然后能够在返回时打印出不同的值
(我知道这不是一个很好的方法,但我只是好奇,似乎找不到一个很好的具体答案。也许我只是看得不够仔细)你可以返回一个向量
std::vector<float> MyFunc(float First, float Second)
{
std::vector<float> Result;
while (First < Second)
{
First++;
Result.push_back(First);
}
return(Result);
}
std::vector MyFunc(先浮后浮)
{
std::向量结果;
while(第一次<第二次)
{
第一++;
结果:推回(第一);
}
返回(结果);
}
- 虽然你不能像那样返回,但有几种方法可以做到 那个首先,将所有结果放入数组或向量中,然后返回 最后。然而,这并不意味着现在就把它们打印出来 他们回来了
- 您可以在循环中调用print函数,这将确保它们立即被打印,然后在最后返回向量。但这似乎也不是你想要的
- 您还可以尝试使用多线程。将结果添加到某种形式的并发队列中,然后让另一个线程处理队列中的元素并将其打印出来。这是最接近我认为你想要的,但要复杂得多李>
- 如果我正确理解了您的问题,您可以这样做
并打印您的阵列
std::vector MyFunc(先浮后浮) { std::载体arr(50); int i=0; while(第一次<第二次) { 第一++; arr[i]=第一; i++; } 返回arr; } 使用协同程序(在Visual Studio 2015 Update 3下工作),它的外观如下所示: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; }
generator<float> MyFunc(float First, float Second) { while (First < Second) { First++; co_yield First; } }
然后你就可以写了生成器MyFunc(先浮后浮){ while(第一次<第二次){ 第一++; co_产量第一; } }
for (auto && i : MyFunc(2,7)) { std::cout << i << "\n"; }
for(auto&&i:MyFunc(2,7)){std::cout使用vector来存储和返回。您正在寻找的是。它们还不是标准的一部分,但计划将它们包含在c++17中。您可以返回更复杂的数据类型,或者通过引用传入数组/向量并对其进行修改。@Fang的建议是最正确的(但有时会超出规格…)接近IMO。请将其更改为使用
而不是浮点数组。std::vector
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; }