【发布时间】:2021-06-26 15:03:09
【问题描述】:
我有一个程序,我必须在其中删除结构向量的一些条目。我是这样做的
for(int i=0; i<molec.size(); i++)
{
if(!molec[i].mine)
molec.erase(molec.begin()+i);
}
molec.mine 是结构中定义的布尔值。问题是,当我这样做时,它会删除一半的具有 molc.mine=false 的元素。我试图寻找一些替代方案,发现我可以做到这一点
vector.erase(std::remove(vec.begin(),vec.end(),1963),vec.end());
问题在于我不知道如何使用结构向量来实现。
我该如何解决这个问题?
【问题讨论】:
-
第一个示例中的代码从不查看紧跟在已擦除元素之后的元素;换句话说,它永远不会删除两个相邻的元素。
-
所以你知道当你删除一个元素时,它会移动其他元素吗?如果
a[i]将被删除,则意味着a[i+1]将变为a[i],a[i+2]将变为a[i+1]。那么无条件递增i会做什么呢?我认为您可能会从阅读"How to debug small programs" 中受益。 -
哦,我明白了。我现在知道了。谢谢
标签: c++ c++11 vector stdvector