[英]C++ vector and array
我試圖解決一個名為“Array Manipulation” 的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.