四.c++中的算法--删除算法
来源:互联网 发布:在线网络代理翻墙 编辑:程序博客网 时间:2024/06/17 08:48
删除算法
删除算法指的是删除容器中满足相应条件的元素。
1. 被删除元素会按顺序向前移动
2. 不能应用于关联式容器
3. 关联式容器的删除需要使用算法erase()
4. list容器,可以使用自身成员函数remove()
1.remove()
直接删除容器的元素
函数原型为:
template<class ForwardIt, class T>ForwardIt remove(ForwardIt first, ForwardIt last, const T& value){ ForwardIt result = first; for (; first != last; ++first) { if (!(*first == value)) {//删除值为value的元素 *result++ = *first; } } return result;}
2.remove_if()
条件删除算法。
函数原型;
template<class ForwardIt, class UnaryPredicate>ForwardIt remove_if(ForwardIt first, ForwardIt last, UnaryPredicate p){ ForwardIt result = first; for (; first != last; ++first) { if (!p(*first)) { *result++ = *first; } } return result;}
说明:
1. 使用的是一元判断 p
3.remove_copy 和remove_copy_if
函数用于复制过程中删除元素。
函数原型为:
//版本一template<class InputIt, class OutputIt, class T>OutputIt remove_copy(InputIt first, InputIt last, OutputIt d_first, const T& value){ for (; first != last; ++first) { if (!(*first == value)) { *d_first++ = *first; } } return d_first;}//版本二template<class InputIt, class OutputIt, class UnaryPredicate>OutputIt remove_copy_if(InputIt first, InputIt last, OutputIt d_first, UnaryPredicate p){ for (; first != last; ++first) { if (!p(*first)) { *d_first++ = *first; } } return d_first;}
说明:
1. 将[first,last)复制到目标区间
2. 形式一: 不复制值等于value的元素
3. 形式二: 不复制是判断式p为真的元素
4. 返回目标区间的最后一个元素的后一个位置
4. 移除重复元素
在vector,list ,deque, multiset,multimap容器中允许重复的元素。删除是可以使用算法:
- unique()
函数原型:
//版本一template<class ForwardIt>ForwardIt unique(ForwardIt first, ForwardIt last){ if (first == last)//为空 return last; ForwardIt result = first; while (++first != last) { if (!(*result == *first)) {//将后面的值把前面重复的值覆盖 *(++result) = *first; } } return ++result;}//版本二template<class ForwardIt, class BinaryPredicate>ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p){ if (first == last) return last; ForwardIt result = first; while (++first != last) { if (!p(*result, *first)) { *(++result) = *first; } } return ++result;}
说明:
1. 的第一个版本使用operator==比较的元素,
2. 第二个版本使用给定的二元谓词p.
3. 返回唯一元素序列的最后一个元素的后一个位置。
5. 赋值过程中删除重复元素
- unique_copy
函数原型:
//版本一template<class ForwardIt, class OutputIt>ForwardIt unique_copy(ForwardIt first, ForwardIt last, OutputIt d_first){ if (first == last) return d_first; *d_first = *first; while (++first != last) { if (!(*d_first == *first)) { *(++d_first) = *first; } } return ++d_first;}//版本二template<class ForwardIt, class OutputIt, class BinaryPredicate>ForwardIt unique_copy(ForwardIt first, ForwardIt last, OutputIt d_first, BinaryPredicate p){ if (first == last) return d_first; *d_first = *first; while (++first != last) { if (!p(*result, *first)) { *(++d_first) = *first; } } return ++d_first;}
说明:
1. 的第一个版本使用operator==比较的元素,
2. 第二个版本使用给定的二元谓词p.
3. 返回目标区间的最后一个元素的后一个位置。
阅读全文
0 0
- 四.c++中的算法--删除算法
- C语言中的算法
- 算法导论 红黑树 学习 删除(四)
- C中的几个常用算法
- C语言中的校验算法
- C语言中的排序算法
- mtdblock.c中的算法思想
- C语言中的基本算法
- Object-C中的常用算法
- C语言中的排序算法
- 《数据结构与算法——C语言描述》答案 3.16 删除链表中的重复元素
- 算法12:删除数组中的重复元素
- 算法-删除字符串中的公共字符
- PHP中的四种基本排序算法
- itk中的特征提取算法(四)
- itk中的图像分割算法(四)
- php中的四种基本排序算法
- Java 中的四种排序算法
- 训练总结 8.15
- Oracle分页工具类+分页对象JavaBean
- Python爬虫——实战一:爬取京东产品价格(逆向工程方法)
- image图片布局存在空隙的解决办法
- [分块]BZOJ 4216——Pig
- 四.c++中的算法--删除算法
- 各种神经网络优化算法:从梯度下降到Adam方法
- 置顶效果
- C++之编写new和delete时需要固守常规(51)---《Effective C++》
- hive serde 解决多字节分隔符
- B
- 原型链,java生态
- 关于public、internal、private、protected介绍
- Word2vec 入门(skip-gram部分)