标准模板库(八):STL算法函数介绍

1.set_difference :构造一个排过序的序列,其中的元素出现在第一个序列中,但是不包含在第二个序列中。(set_intersection :构造一个排过序的序列,其中的元素在两个序列中都存在。)

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
int main()
{
	int a[]={1,2,9,4,4,4,10,8,3};
	int b[]={2,9,5,6};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	sort(v1.begin(),v1.end());
	sort(v2.begin(),v2.end());
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
	//在第一个序列中,不在第二个序列中,存到第三个序列中,返回值为第三个序列的尾端
	return 0;

}
2.set_union :构造一个排过序的序列,它包含两个序列中的所有的不重复元素。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,4,4,10,8,3};
	int b[]={2,9,5,6};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	sort(v1.begin(),v1.end());
	sort(v2.begin(),v2.end());
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
	
	return 0;

}
3.sort :以升序重新排列范围内的元素。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,4,4,10,8,3};
	int b[]={2,9,5,6};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	sort(v1.begin(),v1.end());
	sort(v2.begin(),v2.end());
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
	
	return 0;

}
这个经常会用到

4.stable_partition :与 partition 类似,不过它不保证保留容器中的相对顺序。 stable_sort :类似与 sort ,不过保留相等元素之间的顺序关系。(用的是稳定排序的方式)
5.swap :交换存储在两个对象中的值。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,4,4,10,8,3};
	int b[]={2,9,5,6};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	sort(v1.begin(),v1.end());
	sort(v2.begin(),v2.end());
	swap(v1,v2);//交换两个相同类型的数据
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
	
	return 0;

}
6.swap_ranges :将在范围内的元素与另外一个序列的元素值进行交换。(前一个序列一定要小于等于后一个序列的长度) 
#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,4,4,10,8,3};
	int b[]={2,9,5,6};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	swap_ranges(v2.begin(),v2.end(),v1.begin());
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
	
	return 0;

}
7.transform :将输入的操作作用在范围内的每个元素上,并产生一个新的序列。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
int add5(int i)
{
	return (i+5);
}
int main()
{
	int a[]={1,2,9,4,4,4,10,8,3};
	int b[]={2,9,5,6};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=transform(v1.begin(),v1.end(),v3.begin(),add5);//区间内的每个元素加5
	
	return 0;

}
8.unique :清除序列中相邻重复的元素,和 remove 类似,它也不能真正的删除元素。unique_copy :类似与 unique ,不过它把结果输出到另外一个容器。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
int less5(int i)
{
	return (i+5);
}
int main()
{
	int a[]={1,2,9,4,4,4,10,8,3};
	int b[]={2,9,5,6};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=unique(v1.begin(),v1.end());//返回最后一个不重复值的位置
	
	return 0;

}
9.upper_bound :返回一个 iterator ,它指向在范围内的有序序列中插入 value 而不破坏容器顺序的最后一个位置,该位置标志了一个大于 value 的值。(类似于lower_bound)

10.堆算法: C++ 标准库提供的是 max-heap 。一共由以下 4 个泛型堆算法。 
make_heap :把范围内的元素生成一个堆。重载版本使用自定义的比较操作。 
pop_heap :并不是真正的把最大元素从堆中弹出,而是重新排序堆。它把 first 和 last-1 交换,然后重新做成一个堆。可以使用容器的 back 来访问被“弹出“的元素或者使用 pop_back 来真正的删除。重载版本使用自定义的比较操作。 
push_heap :假设 first 到 last-1 是一个有效的堆,要被加入堆的元素在位置 last-1 ,重新生成堆。在指向该函数前,必须先把元素插入容器后。重载版本使用指定的比较。 
sort_heap :对范围内的序列重新排序,它假设该序列是个有序的堆。重载版本使用自定义的比较操作。
好吧,标准库的函数就这么介绍吧。。。大概会使用了吧。。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值