std::vector.erase() 只删除了它应该删除的一半
std::vector.erase() only erases half of what it should
我有一个程序,我必须删除结构向量的一些条目。我是这样做的
for(int i=0; i<molec.size(); i++)
{
if(!molec[i].mine)
molec.erase(molec.begin()+i);
}
molec.mine 是结构中定义的布尔值。问题是,当我这样做时,它恰好删除了一半 molec.mine=false 的元素。我试图搜索一些替代方案,发现我可以用
vector.erase(std::remove(vec.begin(),vec.end(),1963),vec.end());
问题在于我不知道如何使用结构向量来完成它。
我该如何解决这个问题?
当元素为 erase
d 时,不应执行 i++
。例如
for(int i=0; i<molec.size(); )
{
if(!molec[i].mine)
molec.erase(molec.begin()+i);
else
i++;
}
是的,您应该使用算法库来避免此类问题。
molec.erase(std::remove_if(molec.begin(),molec.end(),[](const auto& v) { return !v.mine;}),molec.end());
您可能正在寻找 std::remove_if
。如
molec.erase(
std::remove_if(
molec.begin(), molec.end(),
[](const auto& elem) { return !elem.mine; }),
molec.end());
我有一个程序,我必须删除结构向量的一些条目。我是这样做的
for(int i=0; i<molec.size(); i++)
{
if(!molec[i].mine)
molec.erase(molec.begin()+i);
}
molec.mine 是结构中定义的布尔值。问题是,当我这样做时,它恰好删除了一半 molec.mine=false 的元素。我试图搜索一些替代方案,发现我可以用
vector.erase(std::remove(vec.begin(),vec.end(),1963),vec.end());
问题在于我不知道如何使用结构向量来完成它。
我该如何解决这个问题?
erase
d 时,不应执行 i++
。例如
for(int i=0; i<molec.size(); )
{
if(!molec[i].mine)
molec.erase(molec.begin()+i);
else
i++;
}
是的,您应该使用算法库来避免此类问题。
molec.erase(std::remove_if(molec.begin(),molec.end(),[](const auto& v) { return !v.mine;}),molec.end());
您可能正在寻找 std::remove_if
。如
molec.erase(
std::remove_if(
molec.begin(), molec.end(),
[](const auto& elem) { return !elem.mine; }),
molec.end());