我也尝试使用v.erase(v.begin()+ j)但我仍然得到" debug assertion failed错误框。这个函数假设要删除副本。例如:{1,2,6,8,2,8} 是向量的元素。这个函数必须使它成为{1,2,6,8}。
void removeDup(vector<int>& v)
{
vector<int> x;
int i,j,size;
size=v.size();
for(i=0;i<size;i++)
{
for(j=1;j<size;j++)
{
if(v[i]==v[j])
{
while(v.back()!=v[j])
{
x.push_back(v.back());
v.pop_back();
}
v.pop_back();
while(!x.empty())
{
v.push_back(x.back());
x.pop_back();
}
}
}
}
}
问题发生在if(v [i] == v [j])内 当我擦除2而功能和v.pop_back()程序没有错误时。
答案 0 :(得分:2)
您正在计算向量v
的大小,并将其用作循环迭代计数限制。不幸的是,只要您在循环中调用v
,就会从pop_back
中删除项目 - 这会减少v
的大小,但您的循环仍会尝试访问所有项目当您在开始时计算尺寸时,v
。
因此,您最终会访问超出向量限制的项目。
使用向量时,使用迭代器通常更有用。看看这个类似的SO问题和答案,因为它可能会帮助你 Erasing elements from a vector