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<float> MyFunc(float First, float Second)
          {
         std::vector<float> arr(50);
          int i=0;
              while (First < Second)
              {
                  First++;
                  arr[i]=first;
                  i++;
              }
          return arr;
          }
      
      std::vector MyFunc(先浮后浮) { std::载体arr(50); int i=0; while(第一次<第二次) { 第一++; arr[i]=第一; i++; } 返回arr; } 使用协同程序(在Visual Studio 2015 Update 3下工作),它的外观如下所示:

      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;
      }