首页 > 编程知识 正文

remove啥意思,if可以用什么代替

时间:2023-05-03 20:48:36 阅读:128495 作者:3522

remove_if是一个欺骗性的函数。

让我们进入源代码看看内部实现

remove _ if (前向迭代器_ first,_前向迭代器__last,_Predicate __pred ) _ first=_ virst typetor if(__first!=_ _ last (_ forward iterator _ _ I=_ _ first; while(__I!=__last(if (! __pred(*__I ) ) __first=_vstd33603360move ) __I ); __first; } } } return __first; }有很多宏观定义,看头痛。 但这有三个参数

函数remove_if (删除序列([__first,__end] )中谓词__pred返回true的所有元素。

但是,实际上并没有被除去。 即使作用于容器,容器的大小也不会变化。 remove_if用序列中的上一个元素依次替换不需要删除的元素。 例如:

int x=5; STD :3360 vector intc { 1,2,3,4,5,6,7 }; remove_if(c.Begin )、c.end )、[x](intn ) {return n x; ); cout'c: '; for(autoI:c ) { couti '; } coutendl; 最终的输出结果如下。

c: 5 6 7 4 5 6 7明显,5、6、7大于5。 因为不符合条件,所以替换了vector的1、2、3。

数组和容器中的元素没有被去除,我们怎么知道应该去除哪个元素呢? 答案在函数的返回值上。

此函数返回从序列中删除第一个元素的迭代器。 在上面的例子中。 返回4的迭代器。

如果您真的想从数组或容器中删除元素,则必须与earse函数配合使用。 如下所示。

int x=5; STD :3360 vector intc { 1,2,3,4,5,6,7 }; c.erase(remove_if ) c.begin )、c.end )、[x] ) intn ) {return n x; ()、c.end ) ); erase的两个参数表示删除的范围。 在这个例子中是4到7。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。