我有一些分段错误的问题,而我想从向量容器中删除元素,这是最新推出的容器.
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)
如何应对这个问题?
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()
最多移动每个元素一次.其他解决方案可能具有二次移动次数.
归档时间: |
|
查看次数: |
546 次 |
最近记录: |