所以我必须在矢量中写入n个实数,然后从中打印出最大的数字。
#include <iostream>
#include <vector>
using namespace std;
void printMax(vector<double>);
int main()
{
vector<double> vct;
double n;
while(cin >> n)
vct.push_back(n);
printMax(vct);
return 0;
}
void printMax(vector<double> x)
{
int max;
for(int i = 1; i < x.size(); i++)
{
if(x[i] > x[i - 1]) max = x[i];
else continue;
}
cout << "Max = \t" << max << endl;
}
当我启动这个程序时,它允许我输入数字,但是一旦我按下ctrl + z并输入它崩溃并说:向量下标超出范围行:1201。我认为问题是与void {{ 1}}部分。
答案 0 :(得分:4)
您必须使用i = 1
开始以下循环:
for (int i = 1; i < x.size(); i++){
if (x[i] > x[i - 1])
max = x[i];
// else continue superfluous
}
因为如果i
为0
,i - 1
将为负值(或unsigned int
的最大值)。在这种情况下,这可能不是一个有效的索引。
另外,为什么使用int
表示实数?
实际上,有一种更简单的方法可以找到矢量的最大元素。它不涉及两个连续元素的比较,而是将当前max
与每个元素进行比较。改进您的算法,或者使用std::max_element
。
当我写改善时,我的意思是正确。
答案 1 :(得分:3)
在for
循环中,当您访问i = 0
时x[i - 1]
(即x[-1]
)。
您可能想要更改为
int max = x[0];
for (int i = 1; i < x.size(); i++){
if(x[i] > max) max = x[i]; // Compare with actual max
答案 2 :(得分:3)
x=0
的第一轮中,你使用x[i - 1]
即。 x[-1]
。
答案 3 :(得分:1)
如果您的第一个索引为0,则行x[i] > x[i - 1]
变为x[0] > x[-1]
,并且x[-1]
在绑定时始终为out。将您的循环更改为从int i = 1
开始,它应该可以解决您的问题。