接上一篇博客https://blog.csdn.net/Master_Cui/article/details/108404257

八、删除元素

template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);template <class ForwardIterator, class UnaryPredicate>
ForwardIterator remove_if (ForwardIterator first, ForwardIterator last, UnaryPredicate pred);

remove会移除迭代器区间中的与val相等的元素

remove_if会移除满足pred条件的元素

这两个函数的返回值是最后一个被删除元素的下一个元素的迭代器

示例与上一篇博客中的copy与copy_if,replace和replace_if类似

九、元素去重

template <class ForwardIterator>
ForwardIterator unique (ForwardIterator first, ForwardIterator last);

unique的意思是将迭代器区间内所有与前一元素相等的元素删除,也就是说如果对容器不排序,第一种形式只会对连续两个相同的元素去重

示例

void uniquetest()
{int a[]={1,1,2,3,2,4,5,6};cout<<sizeof(a)/sizeof(*a)<<endl;int *pos=unique(a, a+sizeof(a)/sizeof(*a));cout<<sizeof(a)/sizeof(*a)<<endl;for (int *pi=a;pi<pos;++pi) {cout<<*pi<<endl;}
}

注意:unique函数并不使数组或者容器的元素减少,去重时只是将元素迁移并覆盖,所以在打印去重的元素时,要利用unique的返回值进行遍历

示例2,对所有元素进行去重,使每个元素只出现一次

void uniquetest()
{int a[]={1,1,2,3,2,4,5,6};stable_sort(a, a+sizeof(a)/sizeof(*a));int *pos=unique(a, a+sizeof(a)/sizeof(*a));for (int *pi=a;pi<pos;++pi) {cout<<*pi<<endl;}
}

十、序列反转

template <class BidirectionalIterator>
void reverse (BidirectionalIterator first, BidirectionalIterator last);

将迭代器范围内的元素进行反转

示例

void reversetest()
{list<int> l={1,2,3,4,5};reverse(l.begin(), l.end());for (list<int>::iterator it = l.begin();it !=l.end();++it) {cout<<*it<<endl;}
}

和list自带的reverse操作类似

十一、序列合并

template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result);

merge函数将两个迭代器范围内的已排序元素合并到以result为起始地址的容器中(该容器必须有足够的空间容纳两个迭代器范围内的元素

示例

void mergetest()
{vector<int> a={4,5,1,2,3};deque<int> b={6,8,9,7,10};stable_sort(a.begin(), a.end());stable_sort(b.begin(), b.end());list<int> c(a.size()+b.size());merge(a.begin(), a.end(), b.begin(), b.end(), c.begin());for (list<int>::iterator it =c.begin();it!=c.end();++it) {cout<<*it<<endl;}
}

十二、序列赋值

template <class ForwardIterator, class T>
void fill (ForwardIterator first, ForwardIterator last, const T& val);template <class OutputIterator, class Size, class T>
void fill_n (OutputIterator first, Size n, const T& val);

fill是用新的值val将迭代器范围内的元素重新赋值

fill_n是用新的值val将以迭代器first为起点的n个值重新赋值

示例和copy和replace类似

参考

《C++ Primer》

《C++标准库》

http://www.cplusplus.com/reference/algorithm/

https://zh.cppreference.com/w/cpp/algorithm

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

C++知识点27——使用C++标准库(常用的泛型算法2)相关推荐

  1. C++知识点19——使用C++标准库(再谈string——string的初始化、赋值、添加、删除、访问)

    1.string的构造函数 string();//默认构造函数,默认初始化时调用 string (const string& str);//拷贝构造函数,拷贝初始化时调用 string (si ...

  2. C++知识点26——使用C++标准库(常用的泛型算法1)

    C++中实现了很多的泛型算法,大约100多个,使用前要添加#include<algorithm> 下面介绍的基本可以满足绝大部分需求,其他的用到再查 一.计数算法 1.count temp ...

  3. C++知识点30——使用C++标准库(关联容器map及其初始化,赋值,查找,添加,删除与迭代器失效)

    一.关联容器简介 关于顺序容器和关联容器的区别已经在博客https://blog.csdn.net/Master_Cui/article/details/107427911中提过 C++标准库中的关联 ...

  4. C++知识点29——使用C++标准库(迭代器适配器)

    在上一篇文章https://blog.csdn.net/Master_Cui/article/details/108512730谈到的迭代器是基本的五种类型的迭代器 但是随着C++标准库的扩展,又实现 ...

  5. C++知识点28——使用C++标准库(再谈迭代器)

    一.迭代器的种类 C++中的容器以及泛型算法会大量的使用迭代器 目前已经出现的迭代器有一下几种 1.输出迭代器 (OutputIterator) 输出迭代器类似于输出流(只能向输出流中写入数据),只能 ...

  6. C++知识点25——使用C++标准库(容器适配器stack、queue、priority_queue)

    除了vector,list,deque等常用的容器,还有根据这些常用的容器进行改造来满足特殊要求的容器,这些特殊容器的行为和常用容器很相近,也称为容器适配器. 常用的容器适配器有三个,分别是stack ...

  7. C++知识点22——使用C++标准库(顺序容器list的初始化、赋值、访问、交换、添加、删除与迭代器失效)

    list容器是双向链表,使用前,需要添加#include <list> 1.list的初始化 常用的构造函数如下 explicit list (const allocator_type&a ...

  8. C++知识点33——使用C++标准库(无序关联容器unordered_(multi)map,unordered_(multi)set)

    C++中,无序关联容器一共有4个,unordered_map,unordered_set,unordered_multimap,unordered_multiset 这四个和有序关联容器最大的区别就是 ...

  9. C++知识点32——使用C++标准库(关联容器set和multiset的初始化,赋值,查找,添加,删除与迭代器失效)

    关联容器map和multimap已经在博客https://blog.csdn.net/Master_Cui/article/details/108690877和https://blog.csdn.ne ...

最新文章

  1. linux 6.4 安装dns,Linux 轻松上手 架设 CentOS 6.4 DNS+FTP ndash;(六)、安装设定vsftp
  2. 【加密解密】单表加密(Javascript实现)
  3. PMBOK7和PRINCE2的相似之处和定位之不同(上篇)
  4. (转)快速统计二进制中1的个数
  5. kitten编程猫里的函数定义,函数实现和函数调用原理
  6. 使用高级管理控制台获得对Windows Home Server的扩展访问
  7. 【51Nod - 1279】 扔盘子(思维)(on-p会超时)
  8. flutter offset_牛笔!自己用Flutter撸一个天气APP
  9. python程序异常实例_Python werkzeug.exceptions方法代码示例
  10. Microsoft Dynamics CRM 2013 的权限管理与分配 (二)
  11. ios 自动缩小字体_iOS WKWebview字体自动放大的问题
  12. 软件工程——软件开发过程中用到的各种图
  13. PROC PRINT过程
  14. FCN全卷积网络模型——高分辨率遥感影像地物识别
  15. linux命令 sh -s,shell脚本中 if 判断时候-s是什么意思?
  16. 国税局发票查验中英文验证码识别,识别率95.2%
  17. 发射功率 dBm 计算
  18. 2019.12.29 BMR计算
  19. 微信小程序直播功能来了,然后呢?
  20. kettle/Pentaho工具之阻塞数据直到步骤都完成

热门文章

  1. MOSS SDK学习笔记系列文章
  2. C++设计模式7--外观模式--The Client don't want to know
  3. 程序员的量化交易(34)--QuantConnect_Lean如何定义Indicator指标2
  4. java中Object类的hashCode和equals及toString方法。
  5. excel:替换问号?时会所有数据被替换掉(通配符问题)
  6. probit概率单位回归分析
  7. 同样的代码,conda无法运行,命令行却可以运行
  8. JMeter进阶系列01--JMeter二次开发
  9. SpringBoot(二):设置springboot同一接口程序启动入口
  10. 移动端页面自适应解决方案—rem布局(进阶版)