我正在尝试学习如何使用 STL 并尝试编写一个函数,该函数将接收对列表的引用并尝试删除所有奇数成员。 我的代码有点问题。这是我的代码
void removeOdds(list<int>& myvector)
{
for(list<int>::iterator p=myvector.begin(); p !=myvector.end();p++)
{
if(*p%2 !=0)
{
list<int>::iterator temp=myvector.erase(p);
p=temp;
if(p !=myvector.begin())
p--;
}
}
}
我遇到的问题是,如果我传递一个包含 1 3 5 2 6 7 的列表。删了1之后,明显是跳到5了,不看3了。 我该如何解决这个问题,因为 p++ 递增,而 p-- 不会发生,因为我在开头。
最佳答案
最简单的方法是使用 std::list::remove_if
.这会根据一元谓词从列表中删除元素。例如,
myvector.remove_if([](int n) { return n % 2 != 0; });
使用“STL”* 的最佳方式是了解其中的内容。
对于 C++11 之前的实现(例如实际的 STL),您可以传递一个函数:
bool is_odd(int n) { return n % 2 != 0; }
myvector.remove_if(is_odd);
*“STL”表示STL,但这也适用于C++标准库
关于c++ - STL列表,删除所有奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30210171/