Rav*_*mar 2 c++ vector undefined-behavior subscript-operator
int n;//input size of array
cin >> n;
vector <int> a(n);
vector <int> in;
for (int i = 0; i < n; i++)
cin >> a[i];//input array elements
if (n == 1) {
cout << "1" << "\n";
return 0;
}
for (int i = 1; i <= n ; i++)//to get longest incresing subsequence in the array
{
int flag = 0, j = i;
while (j < n && a[j] >= a[j - 1] ) {
j++;
flag = 1;
}
if (flag == 1) {
in.push_back(j - i + 1);
i = j;
}
}
int maxval = in[0]; //to get maximum sized element from in
for (int i = 1; i < in.size(); i++)
if (in[i] > maxval)
maxval = in[i];
cout << maxval << "\n";
Run Code Online (Sandbox Code Playgroud)
我尝试了<10000以下的值的相同代码,它工作正常...我已经将所有int替换为很长的int,然后它也显示矢量下标超出范围错误...
样本输入:
10
49532 49472 49426 49362 49324 49247 49165 49162 49108 49093
Run Code Online (Sandbox Code Playgroud)
我期望为0,但显示“向量下标超出范围”
问题的原因是此声明
int maxval = in[0];//to get maximum sized element from in
Run Code Online (Sandbox Code Playgroud)
in使用此输入时向量为空
10
49532 49472 49426 49362 49324 49247 49165 49162 49108 49093
Run Code Online (Sandbox Code Playgroud)
因此,您可能不使用下标运算符。
你可以写例如
int maxval = in.empty() ? 0 : in[0];
Run Code Online (Sandbox Code Playgroud)