我也尝试使用v.erase(v.begin()+ j),但我仍然收到“调试断言失败错误框。此功能假定要删除重复项。例如:{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()程序正常工作时没有错误。

最佳答案

您正在计算向量v的大小,并将其用作循环迭代计数限制。不幸的是,每当您在循环内调用v时,都会从pop_back中删除​​项目-这样会减小v的大小,但是您的循环仍将尝试访问计算时v中的所有项目开始时的大小。

因此,最终将访问超出向量限制的项。

使用向量时,使用迭代器通常更有用。看看这个类似的SO问答,因为它可能会帮助您
Erasing elements from a vector

关于c++ - 调试断言失败! vector 下标超出范围c++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33681484/

10-10 12:38