访问矢量元素时索引越界异常


#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;

int main()
{
int t;
cin>>t;
while(t--)
{ vector <int> a,b;
int i,n,m,k;
bool cond=true;
cin>>n;
for(i=0;i<n;i++)
{
cin>>m;
a.push_back(m);
}
for(i=1;i<n-1;i++)
{
if(a.at(i)==a.at(i+1))
a.erase(a.begin()+i);
}
n=a.size();
for(i=0;i<n;i++)
cout<<a[i];
}
return 0;
}

我想删除所有重复的连续数字。
此程序引发"越界"错误。 是否有任何逻辑错误,或者您能建议一些更好的算法吗?

您正在越界访问,因为在擦除元素后,您的容器现在比您迭代的次数短一个元素。

无论如何;如果你只使用标准库中已有的内容,你可以在两行中解决问题:

auto last = std::unique(a.begin(), a.end());
a.erase(last, a.end()); 

另请参阅:http://en.cppreference.com/w/cpp/algorithm/unique

最新更新