C++向量和数组

C++ vector and array

本文关键字:数组 向量 C++      更新时间:2023-10-16

我试图解决一个名为"数组操作"的HackerRank问题的链接。 我在下面写了这段代码。它工作正常。但是,当我使用数组而不是向量时,我在案例 7-13 中遇到了分割错误。为什么会这样?

long arrayManipulation(int n, vector<vector<int>> queries) {
vector<long> arr(n);
long sum=0, max=LONG_MIN;
for(int i=0;i<n;i++){
arr[i] = 0;
}
for(int i=0;i<queries.size();i++){
arr[queries[i][0]-1] += queries[i][2];
if(queries[i][1]<n) arr[queries[i][1]] -= queries[i][2];
}
for(int i=0;i<n;i++){
sum += arr[i];
if(sum>max) max=sum;
}
return max; }
long arrayManipulation(int n, vector<vector<int>> queries) {
long arr[n];
long sum=0, max=LONG_MIN;
for(int i=0;i<n;i++){
arr[i]=0;
}
for(int i=0;i<queries.size();i++){
arr[queries[i][0]-1]+=queries[i][2];
if(queries[i][1]<n) arr[queries[i][1]]-=queries[i][2];
}
for(int i=0;i<n;i++){
sum+=arr[i];
if(sum>max) max=sum;
}
return max;
}

可变长度数组具有可用堆栈限制,如果它超过可能发生的限制 SegV(通过堆栈溢出(。

如果大小足够大,固定长度数组也会发生同样的情况。

尝试使用此方法以查看问题:

long arr[10000000];  // should fail for same reason in HackerRank