擦除矢量包含的最后一个元素

Pat*_*Las 0 c++ vector erase

我有一些分段错误的问题,而我想从向量容器中删除元素,这是最新推出的容器.

vector<client> :: iterator it;

for(it=ktab->begin(); it!=ktab->end(); ){
    if(it->KEY_w==key_w) ktab->erase( it );
    ++it;
}
Run Code Online (Sandbox Code Playgroud)

如何应对这个问题?

Die*_*ühl 6

ktab->erase(it)显然,有了你,无效it.在紧随其后的语句中,您将增加已经无效的语句it.你可能想要使用类似的东西

ktab->erase(std::remove_if(ktab->begin(), ktab->end(),
                           [=](client const& c){ return c.KEY_w == key_w; }),
            ktab->end());
Run Code Online (Sandbox Code Playgroud)

请注意,使用的解决方案std::remove_if()最多移动每个元素一次.其他解决方案可能具有二次移动次数.