C ++中动态分配的向量中的分段错误
Segmentation fault in a dynamically allocated vector in C++
我正在编写代码来检查之字形数组(其 3 个连续元素不按递增或递减顺序排列的数组)和 return 要删除的最小元素数以使其呈锯齿形-曲折。但是我遇到了大型数组的分段错误。
#include <bits/stdc++.h>
using namespace std;
int minimumDeletions(vector < int > a,int n){
int i,j;
j=n;
for(i=0;i<n;i++){
if(a[i]>a[i+1]){
if(a[i+1]>a[i+2]){
a.erase(a.begin()+(i+2));
i--;
n--;
continue;
}
else{continue;}
}
if(a[i]<a[i+1]){
if(a[i+1]<a[i+2]){
a.erase(a.begin()+(i+2));
i--;
n--;
}
else{continue;}
}
}
j=j-n;
return j;
}
int main() {
int n;
cin >> n;
vector<int> a(n);
for(int a_i = 0; a_i < n; a_i++){
cin >> a[a_i];
}
// Return the minimum number of elements to delete to make the array zigzag
int result = minimumDeletions(a,n);
cout << result << endl;
return 0;
}
a[i+1]
您在这里到达了一个未存储在向量中的元素。当 i=n-1 时,你 for a[n] 基本上没有存储在你的 vector 中。
我正在编写代码来检查之字形数组(其 3 个连续元素不按递增或递减顺序排列的数组)和 return 要删除的最小元素数以使其呈锯齿形-曲折。但是我遇到了大型数组的分段错误。
#include <bits/stdc++.h>
using namespace std;
int minimumDeletions(vector < int > a,int n){
int i,j;
j=n;
for(i=0;i<n;i++){
if(a[i]>a[i+1]){
if(a[i+1]>a[i+2]){
a.erase(a.begin()+(i+2));
i--;
n--;
continue;
}
else{continue;}
}
if(a[i]<a[i+1]){
if(a[i+1]<a[i+2]){
a.erase(a.begin()+(i+2));
i--;
n--;
}
else{continue;}
}
}
j=j-n;
return j;
}
int main() {
int n;
cin >> n;
vector<int> a(n);
for(int a_i = 0; a_i < n; a_i++){
cin >> a[a_i];
}
// Return the minimum number of elements to delete to make the array zigzag
int result = minimumDeletions(a,n);
cout << result << endl;
return 0;
}
a[i+1]
您在这里到达了一个未存储在向量中的元素。当 i=n-1 时,你 for a[n] 基本上没有存储在你的 vector 中。