C ++:如何创建返回向量/数组的返回函数?

时间:2013-09-08 23:15:30

标签: c++ arrays

这是代码背后的动机。今天有一个名叫鲍勃的男孩和他的生日。他邀请了50位朋友,但不是所有的朋友都想给他买礼物。鲍勃有50件礼物,但有些是空的。他的好朋友告诉他每隔一个盒子关闭一次。对于每三个盒子,他应该将每个关闭变为打开,每个打开到关闭。他继续为n小于50的每个第n个盒子执行此操作。最后打开的盒子将有礼物。

这应该可以帮助我解决我的数学课的问题,但我不知道C ++编程的所有复杂方面。我希望我的字符串getValue(vector& arr)返回一个数组/向量。这段代码没有编译,但它显示了我正在尝试做的事情。

#include <iostream>
#include <vector>
#include<algorithm>

using namespace std;
string getValue(vector<string> &arr);

int main()
{
  vector<string> myArr(2);
  vector<string> newArr(2);

  for(int i=2; i <= 50; i++)
  {
    if(i%2==0)
    {
        myArr.push_back("close");
    }
    else
    {
        myArr.push_back("open");
    }
}

newArr = getValue(myArr);

 for(int i=2; i <=50; i++)
 {
    cout << i << " " << newArr[i] << endl;
 }

}

string getValue(vector<string> &arr)
{

 for(int i=2; i <=50; i++)
 {
    if(arr[i]=="close")
    {
      arr[i]="open";
    }
    else if(arr[i]=="open")
    {
      arr[i]="close";
    }

 }

   return arr;

}

4 个答案:

答案 0 :(得分:0)

您通过引用将向量传递给getValue(),这意味着您在该函数中对其进行的更改将影响原始对象(换句话说,您不会对向量的副本进行操作 - 您'实际上是在向量上运行。)

因此,您无需从getValue()返回任何内容 - 只需将其设为void即可,您应该按照自己的意愿行事。

答案 1 :(得分:0)

string getValue(vector&amp; arr) - 返回类型是字符串,而不是向量。您需要更改其返回类型或将其设置为none。

PS: newArr = getValue(myArr); 这是SCOPE背后的错误定位...... 该死的,第三个PS,错误的代码规则被分配

答案 2 :(得分:0)

您无法让string getValue(vector<string> &arr)返回数组/向量。它只能返回string。如果你想要一个函数返回一个数组/向量,那么你必须在函数签名中这样说。

答案 3 :(得分:0)

语法部分: -

  1. 函数的返回类型是一个字符串。将其更改为矢量 你的功能正常工作。

  2. 您可以简单地全局声明向量。这将消除 需要将它传递给函数并返回它。

  3. 对于逻辑部分: -

    你的问题是鲍勃每隔三个盒子切换一次,但是在你的程序中,鲍勃正在更换每个盒子,如果它关闭则打开,如果盒子打开则关闭每个盒子。如果您在问题中写的内容是正确的,那么您的代码应该是这样的。

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void getValue();
    vector<string> myArr(2);
    
    int main()
    {
    
      for(int i=2; i <= 50; i++)
      {
        if(i%2==0)
        {
            myArr.push_back("close");
        }
        else
        {
            myArr.push_back("open");
        }
    }
    
    getValue();
    
     for(int i=2; i <=50; i++)
     {
        cout << i << " " << myArr[i] << endl;
     }
    
    }
    
    void getValue()
    {
    
     for(int i=3; i <=50; i+=3)
     {
        if(myArr[i]=="close")
        {
          myArr[i]="open";
        }
        else if(myArr[i]=="open")
        {
          myArr[i]="close";
        }
     }
    }