C++抽象编程——STL实战(3)——数组元素的移除与合并
来源:互联网 发布:java 浏览器输入框 编辑:程序博客网 时间:2024/05/22 03:31
在STL中,对元素的插入跟移除也是对比数组的一大改进,这次我们就重点讨论一下怎么样在STL中移除跟合并元素。
这里的所有方法都要导入头文件 < algorithm >
实例一:移除指定与特定的值
出口的方法:
remove(first,last,value)remove_if(first,last,value)
关于参数的解析与返回的类型值,参考我上一篇的博文C++抽象编程——STL实战(2)——查找与修改
现在上代码;
#include <iostream>#include <algorithm>#include <vector>using namespace std;bool isOdd(int a);int main(){ vector<int> vec; vector<int>::iterator it,it2; for(int i = 0; i < 10; i++){ int a; cin >> a; vec.push_back(a); } cout << "输入要移除的数 " ; int n; cin >> n; it = remove(vec.begin(), vec.end(),n); /*将移除n后的vector的迭代器的最后值 复制给it*/ for(it2 = vec.begin(); it2 != it; it2++){ cout << *it2 << " "; } cout << endl; cout << "紧接着移除奇数" << endl; it2 = it; /*这一步将我们上一步所得的vector传递下来*/ it = remove_if(vec.begin(),it2,isOdd); for(it2 = vec.begin(); it2 != it; it2++){ cout << *it2 << " "; } return 0;}bool isOdd(int a) { return (a % 2 == 1);}
结果如下;
分析
这里的bool函数是可以为其他我们自定义的函数,因为迭代器会在里面每一个元素都会去遍历,并且用里面的元素作为函数的参数去判断是不是应该被移除。 14为偶数,判断为false,所以不执行romove,继续判断下一个元素5,为true,所以,执行remove。
实例二:移除数组内连续重复元素
出口的方法:
unique(first,last,pre)
其中的pre为bool类型的函数,可要可不要,下面会代码示例:
#include <iostream> #include <algorithm> #include <vector> using namespace std;int main () { vector<int> vec; vector<int>::iterator it,it1; for(int i = 0; i <10; i++ ){ /*输入一个vector*/ int a; cin >> a; vec.push_back(a); } it = unique (vec.begin(), vec.end()); for(it1 = vec.begin(); it1 != it; it1++){ cout << *it1 << " "; } return 0;}
结果如下:
注意,这里移除指的是连续且重复的元素,这就是为什么两个4没有移除其中一个,因为他们是不连续的。那么我们该怎么办呢?很简单,把它们变为连续的不就好了,那么怎么变为连续的呢?我们就把数组sort一下不就完了嘛
实例三:合并数组
出口的方法:
merge(first1, last1,first2, last2,result);
参数解释:
1. first1, last1,first2, last2,分别为两个数组的合并范围。
2. result是用于储存这个数组的首个迭代器
我们看个代码:
#include <iostream> #include <algorithm> #include <vector> using namespace std;int main () { vector<int> vec; vector<int> vec1; vector<int> vec2; vector<int>::iterator it; for(int i = 0; i <10; i++ ){ /*输入第一个vector*/ vec.push_back(5 * i); } for(int n = 10; n >= 0; n--){/*输入第二个vector*/ vec2.push_back(4 * n); } /*合并*/ merge(vec.begin(),vec.end(),vec1.begin(),vec1.end(),vec2.begin()); cout << "合并后的值为" << endl; for(it = vec2.begin(); it != vec2.end(); it++){ cout << *it << " "; } cout << endl; cout << "排序后的值为" << endl; sort(vec2.begin(),vec2.end()); for(it = vec2.begin(); it != vec2.end(); it++){ cout << *it << " "; } return 0;}
结果为:
0 0
- C++抽象编程——STL实战(3)——数组元素的移除与合并
- C++抽象编程——STL实战(2)——查找与修改
- 编程之美01—返回数组中所有元素与一个元素相除的结果
- 2、(lodash_gcy)移除数组指定元素—remove
- (lodash_gcy)unique—移除数组中的相同元素
- LeetCode27——Remove Element(移除数组中指定的元素)
- C++抽象编程——STL实战(4)——计算集合的交集,并集及区别
- C++抽象编程——STL实战(1)——迭代器详解
- C++抽象编程——STL(5)——剔除重复元素
- python|计蒜客——移除数组中的重复元素
- C++抽象编程——STL(3)——离散事件模拟与排队问题
- C++STL:移除map中的元素
- 简单的算法问题4——移除数组中重复的元素
- 简单的算法问题3——元素移除
- C++抽象编程——STL实战(5)——map在数据文件查找中的应用
- C语言——数组与指针-元素的值
- JS编程训练 | 题3:移除数组中的元素
- C++抽象编程——STL(2)——括号匹配与口袋计算器
- Java.SE01.多线程_案例01
- 良好的微服务架构能够取代企业服务总线吗?
- 51nod1258【二分】
- 《大教堂和集市》读后感
- Picasso源码学习
- C++抽象编程——STL实战(3)——数组元素的移除与合并
- day04_DOM&xml
- itoa(),atoi()实现
- 【Leetcode】235. Lowest Common Ancestor of a Binary Search Tree
- POJ 3268
- 数据库连接池简介和 C3P0的JDBC配置
- v4l2的应用程序编写
- python入门之数据类型
- 递推递归--J