在 C++ 中从向量中删除元素

问题描述 投票:0回答:1

我试图使用下面的代码从向量中删除负元素(小于 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;
}
c++ vector
1个回答
1
投票

从向量中删除它指向的项后,迭代器对于 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.