c++ - 为什么我的代码无法处理大数组输入(>10000)?

标签 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";

我尝试了相同的代码来获取 < 10000 的值,它工作正常...我已将所有 int 替换为 long long int,然后它还显示 vector 下标超出范围错误...

示例输入:

10

49532 49472 49426 49362 49324 49247 49165 49162 49108 49093

我期待 0,但它显示“vector 下标超出范围”

最佳答案

问题的原因就是这个语句

int maxval = in[0];//to get maximum sized element from in 

使用此输入时, vector in为空

10

49532 49472 49426 49362 49324 49247 49165 49162 49108 49093

所以你不能使用下标运算符。

你可以这样写

int maxval = in.empty() ? 0 : in[0];

关于c++ - 为什么我的代码无法处理大数组输入(>10000)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58805096/

相关文章:

c++ - 异常安全构造函数

c++ - C++ 中包含固定大小数组的队列

java - 我的 Vector 丢失数据有什么原因吗?

c++ - 在 IEEE float 实现中,当溢出导致 INF 时,它是否被视为未定义的行为?

c - 访问部分分配的数组是否定义明确,超过分配的部分?

c++ - 未定义的行为是否适用于 asm 代码?

c++ - 将 std::string 传递给 C 风格的 API 是否安全?

c++ - 跟踪内存泄漏

c++ - 测量重载运算符和成员函数时间的函数

vector - 给定向量列表的质心