我也尝试使用 v.erase(v.begin()+j) 但我仍然收到“调试断言失败错误框。此函数假设删除重复项。例如:{1,2,6,8 ,2,8} 是 vector 的元素。此函数必须使其成为 {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() 程序正常工作时。
最佳答案
您正在计算 vector v
的大小并将其用作循环迭代计数限制。不幸的是,每当您在循环内调用 pop_back
时,您都会从 v
中删除项目 - 这会减小 v
的大小,但您的循环仍将继续尝试访问 v
开始时计算大小时 中的所有项目。
因此,您最终访问的项目超出了 vector 的限制。
使用 vector 时,使用迭代器通常更有用。看看这个类似的 SO question and answer 因为它可能会帮助你 Erasing elements from a vector
关于c++ - 调试断言失败! vector 下标超出范围 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33681484/