gpt4 book ai didi

c++ - STL列表,删除所有奇数

转载 作者:行者123 更新时间:2023-11-30 00:48:58 25 4
gpt4 key购买 nike

我正在尝试学习如何使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com