C++知识点27——使用C++标准库(常用的泛型算法2)
接上一篇博客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)相关推荐
- C++知识点19——使用C++标准库(再谈string——string的初始化、赋值、添加、删除、访问)
1.string的构造函数 string();//默认构造函数,默认初始化时调用 string (const string& str);//拷贝构造函数,拷贝初始化时调用 string (si ...
- C++知识点26——使用C++标准库(常用的泛型算法1)
C++中实现了很多的泛型算法,大约100多个,使用前要添加#include<algorithm> 下面介绍的基本可以满足绝大部分需求,其他的用到再查 一.计数算法 1.count temp ...
- C++知识点30——使用C++标准库(关联容器map及其初始化,赋值,查找,添加,删除与迭代器失效)
一.关联容器简介 关于顺序容器和关联容器的区别已经在博客https://blog.csdn.net/Master_Cui/article/details/107427911中提过 C++标准库中的关联 ...
- C++知识点29——使用C++标准库(迭代器适配器)
在上一篇文章https://blog.csdn.net/Master_Cui/article/details/108512730谈到的迭代器是基本的五种类型的迭代器 但是随着C++标准库的扩展,又实现 ...
- C++知识点28——使用C++标准库(再谈迭代器)
一.迭代器的种类 C++中的容器以及泛型算法会大量的使用迭代器 目前已经出现的迭代器有一下几种 1.输出迭代器 (OutputIterator) 输出迭代器类似于输出流(只能向输出流中写入数据),只能 ...
- C++知识点25——使用C++标准库(容器适配器stack、queue、priority_queue)
除了vector,list,deque等常用的容器,还有根据这些常用的容器进行改造来满足特殊要求的容器,这些特殊容器的行为和常用容器很相近,也称为容器适配器. 常用的容器适配器有三个,分别是stack ...
- C++知识点22——使用C++标准库(顺序容器list的初始化、赋值、访问、交换、添加、删除与迭代器失效)
list容器是双向链表,使用前,需要添加#include <list> 1.list的初始化 常用的构造函数如下 explicit list (const allocator_type&a ...
- C++知识点33——使用C++标准库(无序关联容器unordered_(multi)map,unordered_(multi)set)
C++中,无序关联容器一共有4个,unordered_map,unordered_set,unordered_multimap,unordered_multiset 这四个和有序关联容器最大的区别就是 ...
- C++知识点32——使用C++标准库(关联容器set和multiset的初始化,赋值,查找,添加,删除与迭代器失效)
关联容器map和multimap已经在博客https://blog.csdn.net/Master_Cui/article/details/108690877和https://blog.csdn.ne ...
最新文章
- linux 6.4 安装dns,Linux 轻松上手 架设 CentOS 6.4 DNS+FTP ndash;(六)、安装设定vsftp
- 【加密解密】单表加密(Javascript实现)
- PMBOK7和PRINCE2的相似之处和定位之不同(上篇)
- (转)快速统计二进制中1的个数
- kitten编程猫里的函数定义,函数实现和函数调用原理
- 使用高级管理控制台获得对Windows Home Server的扩展访问
- 【51Nod - 1279】 扔盘子(思维)(on-p会超时)
- flutter offset_牛笔!自己用Flutter撸一个天气APP
- python程序异常实例_Python werkzeug.exceptions方法代码示例
- Microsoft Dynamics CRM 2013 的权限管理与分配 (二)
- ios 自动缩小字体_iOS WKWebview字体自动放大的问题
- 软件工程——软件开发过程中用到的各种图
- PROC PRINT过程
- FCN全卷积网络模型——高分辨率遥感影像地物识别
- linux命令 sh -s,shell脚本中 if 判断时候-s是什么意思?
- 国税局发票查验中英文验证码识别,识别率95.2%
- 发射功率 dBm 计算
- 2019.12.29 BMR计算
- 微信小程序直播功能来了,然后呢?
- kettle/Pentaho工具之阻塞数据直到步骤都完成
热门文章
- MOSS SDK学习笔记系列文章
- C++设计模式7--外观模式--The Client don't want to know
- 程序员的量化交易(34)--QuantConnect_Lean如何定义Indicator指标2
- java中Object类的hashCode和equals及toString方法。
- excel:替换问号?时会所有数据被替换掉(通配符问题)
- probit概率单位回归分析
- 同样的代码,conda无法运行,命令行却可以运行
- JMeter进阶系列01--JMeter二次开发
- SpringBoot(二):设置springboot同一接口程序启动入口
- 移动端页面自适应解决方案—rem布局(进阶版)