我有一个程序,应该将用户的值读入矢量。然后我的函数应该保持运行总和并从元素1开始并将元素2与总和进行比较(这一点它只是元素1)。移动到下一个元素,将元素2添加到总和,并查看元素3是否大于元素1和2的总和。我应该只打印大于总和的元素。我无法打印出任何值。有人可以让我知道我可能做错了什么吗?谢谢
int main()
{
vector <int> theData;
int i;
cout<< "Enter in the list of integers ending with a -1" << endl;
do
{
cin >> i;
if (i==-1)
{
break;
}
theData.push_back(i);
}while(i!=-1);
int index = 1;
int runningSum = unsortedData[i];
largeValue(unsortedData, index, runningSum);
system("PAUSE");
return 0;
}
void largeValue(vector<int> myVector, int index, int runningSum)
{
int size = myVector.size();
if (index == size)
{
return;
}
if (myVector[index] > runningSum)
{
cout << myVector[index] << " ";
runningSum += myVector[index];
index = index +1;
largeValue(myVector, index, runningSum);
}
else if (myVector[index] < runningSum)
{
runningSum += myVector[index];
index = index + 1;
largeValue(myVector, index, runningSum);
}
}
答案 0 :(得分:2)
您的代码中存在多个错误:
int runningSum = unsortedData[i];
你可能意味着index
,而不是i
。但两者都是错误的:数组中的第一个索引是0
,而不是1
(这是index
的值)。
此外,您的递归函数至少包含一个错误:您不认为当前元素等于总和。
另一件事:你通过值将向量传递给你的函数 - 不是一个好主意:对于函数的每次调用,整个向量都是复制,这对于中等大小可能需要相当长的时间向量。在“真实”代码中,大数据类型应始终通过(const)引用传递。只需稍微更改功能签名:
void largeValue(vector<int> const& myVector, int index, int runningSum)
这样,您将向量的不可修改引用传递给函数而不是复制它。请注意,这使得无法修改函数内部向量的数据。
答案 1 :(得分:1)
首先,在myVector[index] == runningSum
时,您的函数无法有意义地处理案例。
其次,runningSum
的初始值取自unsortedData[i]
,这是没有任何意义的,因为那时i
是-1
。你可能意味着unsortedData[0]
。
答案 2 :(得分:0)
早期主要使用数据,稍后使用unsortedData。我不知道为什么编译器没有抱怨未定义unsortedData。