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

C++: How do you create a return function that returns a vector/array?

本文关键字:返回 向量 数组 函数 创建 何创建 C++      更新时间:2023-10-16

这是代码背后的动机。有一个叫鲍勃的男孩,今天是他的生日。他邀请了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;
}
你不能

让你的string getValue(vector<string> &arr)返回数组/向量。它只能返回一个string。如果您希望函数返回数组/向量,则必须在函数签名中说明。

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

因此,您无需从getValue()返回任何内容 - 只需将其void,它应该可以满足您的需求。

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

附注:newArr = getValue(myArr);它在示波器后面,定位错误...该死的,第三个PS,分配了错误的代码规则

对于语法部分:-

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

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

对于逻辑部分:-

您的问题说 Bob 每三个框切换一次,但在您的程序中,Bob 正在更改每个框以打开(如果关闭)和每个框以关闭(如果打开)。如果你在问题中写的内容是正确的,你的代码应该是这样的。

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