我试图使用下面的代码从向量中删除负元素(小于 0),但是每当向量的最后一个元素为负元素时,我就会收到错误(分段错误)
int main()
{
//Initializing the vector
vector<int> A={5,4,3,1,1,-1};
// iterator
vector<int> :: iterator iter;
//Printing the vector
for(iter=A.begin();iter!=A.end();iter++)
{
cout<<(*iter)<<" ";
}
cout<<endl;
//Deleting the integers lesser than 1
for(iter=A.begin();iter!=A.end();iter++)
{
if((*iter)<1)
{
A.erase(iter);
}
}
return 0;
}
从向量中删除它指向的项后,迭代器对于 for 循环中的 ++ 不再有效。
擦除函数返回下一个迭代器。您可以在https://en.cppreference.com/w/cpp/container/vector/erase
中看到正确的循环样式for (std::vector<int>::iterator it = c.begin(); it != c.end();)
{
if (*it % 2 == 0)
it = c.erase(it);
else
++it;
}