Vector 为什么擦除函数会出现运行时错误? 向量a; a、 推回(0); int n=a.size(); int-cnt=0; 对于(自动itr=a.begin();itr!=a.end();itr++) { 如果(*itr==0) { cnt++; a、 擦除(itr); } }

Vector 为什么擦除函数会出现运行时错误? 向量a; a、 推回(0); int n=a.size(); int-cnt=0; 对于(自动itr=a.begin();itr!=a.end();itr++) { 如果(*itr==0) { cnt++; a、 擦除(itr); } },vector,stl,Vector,Stl,代码正在插入除零以外的数字。 由于某种原因,a.erase(itr)行给出了运行时错误。 请提供帮助。使用erase可以修改向量,使迭代器无效,这是一个稍微修改代码的解决方案: vector<int> a; a.push_back(0); int n = a.size(); int cnt = 0; for (auto itr = a.begin(); itr != a.end(); itr++) { if(*itr == 0) { cnt++;

代码正在插入除零以外的数字。 由于某种原因,
a.erase(itr)
行给出了运行时错误。 请提供帮助。

使用erase可以修改向量,使迭代器无效,这是一个稍微修改代码的解决方案:

vector<int> a;
a.push_back(0);

int n = a.size();


int cnt = 0;
for (auto itr = a.begin(); itr != a.end(); itr++)
{
    if(*itr == 0)
    {
        cnt++;
        a.erase(itr); 
    }
}
向量a;
a、 推回(0);
int n=a.size();
int-cnt=0;
自动itr=a.begin();
while(itr!=a.end())
{
如果(*itr==0)
{
cnt++;
itr=a.擦除(itr);
}
其他的
++itr;
}
注意,n和count的正确类型是
size\u type
而不是int

  vector<int> a;
  a.push_back(0);

  int n=a.size();
  int cnt=0;
  auto itr=a.begin();

  while (itr != a.end()) 
  {
    if(*itr == 0)
    {
      cnt++;
      itr = a.erase(itr); 
    }
    else
      ++itr;
  }