C++矢量下标超出范围行1201
C++ Vector subscript out of range line 1201
所以我不得不将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并输入,它就会崩溃,并说:vector subscript超出范围行:1201。我认为一个问题是无效的printMax
部分。
您必须使用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
将是负1(或者unsigned int
的最大值)。在这种情况下,这可能不是一个有效的索引。
另外,为什么要用int
来表示上述实数?
事实上,有一种更简单的方法可以找到向量的最大元素。它不涉及两个连续元件的比较,而是当前max
与每个元件的比较。改进您的算法,或者使用std::max_element
。
当我写改进时,我的意思实际上是纠正。
在for循环x=0
的第一轮中使用x[i - 1]
,即x[-1]
。
在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
如果第一个索引为0,则线x[i] > x[i - 1]
变为x[0] > x[-1]
,并且x[-1]
始终超出If边界。将循环更改为从int i = 1
开始,它将解决您的问题。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 尝试通过多个向量访问变量时,向量下标超出范围
- 错误:未在此范围内声明'reverse'
- 正在将指针转换为范围
- 使用std::transform将一个范围的元素添加到另一个范围中
- 在基于范围的for循环中使用结构化绑定声明
- 如何计算数据类型的范围,例如int
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 在C++中查找范围的长度
- 如何设置一个范围来提取我想要获得的信息
- 并行用于C++17中数组索引范围内的循环
- 为左值和右值的包装器实现C++范围
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 超出范围时使用对象
- 不计算一个范围内的完美数
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 错误:矢量下标超出范围.1201路
- C++矢量下标超出范围行1201