C++ list容器删除指定元素

        以std::list<int>容器为例,删除元素大于100的值。

方法1:使用迭代器遍历并删除

#include <iostream>
#include <list>

void removeGreaterThan100(std::list<int>& lst) {
    auto it = lst.begin(); // 获取列表的开始迭代器
    while (it != lst.end()) { // 遍历列表
        if (*it > 100) { // 如果当前元素大于100
            it = lst.erase(it); // 删除当前元素,并返回下一个元素的迭代器
        } else {
            ++it; // 否则,移动到下一个元素
        }
    }
}

int main() {
    std::list<int> myList = {50, 150, 200, 75, 120, 30};
    removeGreaterThan100(myList);
    return 0;
}

方法2:使用std::remove_iferase

C++标准库提供了std::remove_if算法,可以方便地移除满足特定条件的元素。结合erase方法,可以高效地删除大于100的值。

#include <iostream>
#include <list>
#include <algorithm> // 包含 std::remove_if

void removeGreaterThan100(std::list<int>& lst) {
    lst.erase(std::remove_if(lst.begin(), lst.end(), [](int x) { return x > 100; }), lst.end());
}

int main() {
    std::list<int> myList = {50, 150, 200, 75, 120, 30};
    removeGreaterThan100(myList);
    return 0;
}

方法3:使用C++20的erase_if

C++20引入了erase_if方法,可以直接在容器上删除满足条件的元素,代码更加简洁。

#include <iostream>
#include <list>
#include <algorithm> // 包含 erase_if(C++20)

void removeGreaterThan100(std::list<int>& lst) {
    lst.erase_if([](int x) { return x > 100; });
}

int main() {
    std::list<int> myList = {50, 150, 200, 75, 120, 30};
    removeGreaterThan100(myList);
    return 0;
}

总结

  • 方法1:直接使用迭代器遍历并删除,适合所有C++标准。

  • 方法2:使用std::remove_iferase,代码更简洁,适合C++11及以上版本。

  • 方法3:使用C++20的erase_if,代码最简洁,但需要C++20支持。

   注意:直接遍历删除会导致迭代器失效

void removeGreaterThan100(std::list<int>& lst) 
{
    for(auto itor=lst.begin();itor1=lst.end();itor++
    {
        if (*it > 100) { 
            lst.erase(it); // 删除当前元素
        } 
    }
}
    

        查看list值,打印list

for (int num : myList) 
{
        std::cout << num << " ";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值