std::remove-----std::remove_if

`std::remove`和std::remove_if 是 C++11 标准库中的一个算法函数.

std::remove

作用

遍历一遍容器,将容器中所有不是指定元素的元素往前复制。

总之就是一句话:

把不该删除的移动到前面,后面的就是应该删除的。

注意:

1,不会将指定元素往后移,而是直接删除目标元素。

2,删除后容器的容量不变。

#include <iostream>
#include <algorithm>

int main(){
    std::string str="a,b,c,d,e,f";
    auto iter=std::remove(str.begin(),str.end(),',');
    std::cout<<str<<std::endl;

    return 0;
}

输出:

#include <iostream>
#include <algorithm>

int main(){
    std::string str="abcdef";
    auto iter=std::remove(str.begin(),str.end(),'a');
    std::cout<<str<<std::endl;

    return 0;
}

返回值

返回最后一个元素移动的新位置的下一个元素位置的迭代器。

作用:

删除容器中的所有指定元素。

#include <iostream>
#include <algorithm>

int main(){
    std::string str="a,b,c,d,e,f,";
    auto iter=std::remove(str.begin(),str.end(),',');
    str.erase(iter,str.end());
    std::cout<<str<<std::endl;

    return 0;
}

#include <iostream>
#include <algorithm>
#include <vector>

int main(){
    std::vector<int> vec{1,2,3,4,1,1,1,1,5};
    auto iter=std::remove(vec.begin(),vec.end(),1);
    for(int v:vec) std::cout<<v<<" ";
    std::cout<<std::endl;
    vec.erase(iter,vec.end());
    for(int v:vec) std::cout<<v<<" ";
    std::cout<<std::endl;

    return 0;
}

std::remove_if

作用

std::remove只能对单个数据操作,remove_if可以利用函数对象进行条件设置。

#include <iostream>
#include <algorithm>
#include <vector>

int main(){
    std::vector<int> vec{1,2,3,4,5,6,7,8,9,10};
    std::remove_if(vec.begin(),vec.end(),[](int v){
        return v%2==0;
    });
    for(int v:vec) std::cout<<v<<" ";
    std::cout<<std::endl;

    return 0;
}

删除不满足条件的元素---返回值

#include <iostream>
#include <algorithm>
#include <vector>

int main(){
    std::vector<int> vec{1,2,3,4,5,6,7,8,9,10};
    auto iter=std::remove_if(vec.begin(),vec.end(),[](int v){
        return v%2==0;
    });
    vec.erase(iter,vec.end());
    for(int v:vec) std::cout<<v<<" ";
    std::cout<<std::endl;

    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
std::remove_if是一个算法函数,用于从容器中删除满足特定条件的元素。这个函数接受三个参数:容器的起始迭代器、容器的结束迭代器和一个函数或函数对象来判断要删除的元素。它会将满足条件的元素移动到容器的末尾,并返回一个指向被移动元素的新的逻辑结尾位置的迭代器。 在给定的代码示例中,std::remove_if函数用于从vector中移除偶数。isEven函数被传递给std::remove_if作为判断条件,它返回true表示元素是偶数。通过调用std::remove_if后,容器中的元素移动到了末尾,但并没有真正删除它们。 如果想要真正删除这些元素,还需要使用vector的erase函数。这个函数接受两个迭代器参数,指定要删除的元素的范围。在给定的代码示例中,使用std::remove_if的返回值itor和容器的末尾迭代器作为erase函数的参数,以删除满足条件的元素。 至于std::remove_if和std::remove函数的添加版本,根据引用的描述,它们在C 20版本之前都已经存在了。具体来说,std::remove_if函数比std::remove函数稍新一些。但是,关于它们的功能变更,我没有找到相关的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [没想到C++中的std::remove_if()函数历史还挺悠久](https://blog.csdn.net/shihengzhen101/article/details/105006898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值