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

标签 c++ stl

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

相关文章:

c++ - 如何在 C++ 中迭代集合映射 (std::map<string,std::set< string>>)?

c++ - 具有强异常保证的同步 STL 容器插入

c++ - 在线程退出时重生线程

c++ - 在 C++11 中创建一个保留锁定尝试顺序的锁

c++ - 未加载的图像尺寸

c++ - 您可以在不同的文件中编写 OpenGL 着色器,然后将其链接到程序吗?

c++ - 尝试使用/包含/编译第 3 方库 libmagic。 C/C++文件类型检测

c++ - 快速可变大小容器 C++

c++ - 为什么 std::fill 使用 ForwardIterator 而不是 OutputIterator?

c++ - std::sort 如何处理对列表?