这是代码背后的动机。今天有一个名叫鲍勃的男孩和他的生日。他邀请了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;
}
答案 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)
语法部分: -
函数的返回类型是一个字符串。将其更改为矢量 你的功能正常工作。
您可以简单地全局声明向量。这将消除 需要将它传递给函数并返回它。
对于逻辑部分: -
你的问题是鲍勃每隔三个盒子切换一次,但是在你的程序中,鲍勃正在更换每个盒子,如果它关闭则打开,如果盒子打开则关闭每个盒子。如果您在问题中写的内容是正确的,那么您的代码应该是这样的。
#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";
}
}
}