STL算法(中)

常用排序算法

sort

功能描述:
对容器内元素进行排序
函数原型:
sort(iterator beg, iterator end, _Pred) ;
// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
// beg 开始迭代器
// end 结束迭代器
// _Pred 谓词

sort属于开发中最常用的算法之一,需熟练掌握  

 代码实现

#include 
#include
#include//算法 头文件
//sort(iterator beg, iterator end, _Pred); 第三个元素谓词可加不加,不加为默认 
using namespace std;
void print(int val){
	cout<val2;
//}
void test01(){
	vectorv;
	v.push_back(10);
	v.push_back(30);
	v.push_back(50);
	v.push_back(20);
	v.push_back(40);
	//利用sort进行升序
	sort(v.begin(),v.end());
	
	for_each(v.begin(),v.end(),print); 
	cout<());//内建函数对象 
	 	for_each(v.begin(),v.end(),print);//逆向输出
		 //三种输出方法 
} 
int main()
{
	test01();
	system("pause");
}

再次证明普通函数完全可以替代仿函数,但是其类型要一样,具体参考for_each案例和count_if案例 

random_shuffle

功能描述:
洗牌 指定范围内的元素随机调整次序
函数原型:
random_shuffle(iterator beg, iterator end) ;
// 指定范围内的元素随机调整次序
// beg 开始迭代器
// end 结束迭代器

//利用洗牌算法打乱顺序
    random_shuffle(v.begin(),v.end());
    
    for_each(v.begin(),v.end(),print());

再加上随机种子实现乱序

代码实现

#include 
#include
#include//算法 头文件
#include
using namespace std;
class print{
	public:
	void operator()(int val){
		cout<v;
	for(int i=0;i<10;i++){
		v.push_back(i);
	}
	//利用洗牌算法打乱顺序
	random_shuffle(v.begin(),v.end());
	
	for_each(v.begin(),v.end(),print());
	 
} 
int main()
{
	srand((unsigned int)time(NULL));//经典随机种子 
	test01();
	system("pause");
}
总结:random_shuffle洗牌算法比较实用,使用时记得加随机数种子

merge

功能描述:
两个容器元素合并,并存储到另一容器中
函数原型:
merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest) ;
// 容器元素合并,并存储到另一容器中
// 注意: 两个容器必须是有序的  合并后还是有序序列 
// beg1 容器 1 开始迭代器 // end1 容器 1 结束迭代器 // beg2 容器 2 开始迭代器 // end2 容器 2 结束迭代器 //dest 目标容器 开始 迭代器

代码实现

#include 
#include
#include
// 容器元素合并,并存储到另一容器中
// 注意: 两个容器必须是有序的
// beg1 容器1开始迭代器 // end1 容器1结束迭代器 // beg2 容器2开始迭代器 // end2 容器2结束迭代器 //
//dest 目标容器开始迭代器
//有意思是合并后还是有序序列 
using namespace std;
class print{
	public:
	void operator()(int val){
		cout<v1;
	vectorv2;
	
	for(int i=0;i<10;i++){
		v1.push_back(i);
		v2.push_back(i+5);
	}
	
	//目标容器
	vectorvTarget;
	//此时要给目标容器分配空间
	vTarget.resize(v1.size()+v2.size()); 
	
	merge(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin());
	
	for_each(vTarget.begin(),vTarget.end(),print()); 
} 
int main()
{
	test01();
	system("pause");
}

实现

如图所示   合并后还是有序序列 

reverse

功能描述:
将容器内元素进行反转
函数原型:
reverse(iterator beg, iterator end) ;
// 反转指定范围的元素
// beg 开始迭代器  //end  结束迭代器

代码实现 

#include 
#include
#include//算法 头文件

using namespace std;
class print{
	public:
	void operator()(int val){
		cout<v;
	v.push_back(10);
	v.push_back(30);
	v.push_back(50);
	v.push_back(20);
	v.push_back(40);
	
	cout<<"反转前:"<

常用拷贝和替换算法

copy

vectorv2(v1);//也可以直接拷贝,不用算法赋空间   也可等号赋值   (具体见前面的容器总结)

功能描述:
容器内指定范围的元素拷贝到另一容器中
函数原型:
copy(iterator beg, iterator end, iterator dest) ;
// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
// beg 开始迭代器
// end 结束迭代器
// dest 目标起始迭代器

 

#include 
#include
#include//算法 头文件

using namespace std;
class print{
	public:
	void operator()(int val){
		cout<v1;
	for(int i=0;i<10;i++){
		v1.push_back(i);
	}
//	vectorv2(v1);//也可以直接拷贝,不用算法   也可等号赋值 
	vectorv2;
	//设置内存空间 
	v2.resize(v1.size());
	
	copy(v1.begin(),v1.end(),v2.begin());
	for_each(v2.begin(),v2.end(),print());
	
} 
int main()
{
	test01();
	system("pause");
}

replace

功能描述:
将容器内指定范围的旧元素修改为新元素
函数原型:
replace(iterator beg, iterator end, oldvalue, newvalue) ;
// 将区间内旧元素 替换成 新元素
// beg 开始迭代器
// end 结束迭代器
// oldvalue 旧元素
// newvalue 新元素

简单,没什么说的,直接放代码

#include 
#include
#include//算法 头文件

using namespace std;
class print{
	public:
		void operator()(int val){
			cout<v;
	v.push_back(20);
	v.push_back(30);
	v.push_back(20);
	v.push_back(50);
	v.push_back(20);
	v.push_back(60);
	v.push_back(20);
	v.push_back(70);
	cout<<"替换前"<

 

replace_if

功能描述 :
将区间内 满足条件 的元素,替换成指定元素
函数原型:
replace_if(iterator beg, iterator end, _pred, newvalue) ;
// 按条件替换元素,满足条件的替换成指定元素
// beg 开始迭代器
// end 结束迭代器
// _pred 谓词   (bool)
// newvalue 替换的新元素

 代码如下

#include 
#include
#include//算法 头文件
using namespace std;
//谓词  返回bool类型
class Greater30{
	public:
		bool operator()(int val){
			return val>=30;
		}
};

class print//仿函数 
{
	public:
		void operator()(int val){
			cout<v;
	v.push_back(20);
	v.push_back(30);
	v.push_back(20);
	v.push_back(50);
	v.push_back(20);
	v.push_back(60);
	v.push_back(20);
	v.push_back(70);
	cout<<"替换前"<

swap

功能描述:
互换两个容器的元素
函数原型:
swap(container c1, container c2) ;
// 互换两个容器的元素
// c1 容器 1
// c2 容器 2
直接写两个容器
代码如下
#include 
#include
#include//算法 头文件

using namespace std;
void print(int val){
	cout<v1;
	vectorv2;
	
	for(int i=0;i<10;i++){
	v1.push_back(i);
	v2.push_back(i+100);	
	} 
	
	cout<<"交换前:"<

 

你可能感兴趣的:(50,c++,算法,开发语言)