C++:STL常用算法归纳(更新中)

3 篇文章 0 订阅

C++中有关算法的头文件都包含在:algorithm 里面

1 count

统计范围 [first, last) 中满足特定判别标准的元素数。

  1. 计数等于 value 的元素。

1.1 用法

传入first、end迭代器以及要统计的value值,返回统计的数量
int c = count(v.begin(), v.end(), value);

如果value是自定义类型的对象时,则需要重载==操作符,因为count底 层判断时,使用 == 符号,而当要统计自定义类型数据时,需要在设计class时需要重载 == 操作符。

class Person{
	public:
		string name;
		int age;
		bool operator== (const Person& p){
			return this->age == p.age;//此处统计的时age相等的对象
		}
};

2 count_if

统计范围 [first, last) 中满足特定判别标准的元素数。

  1. 计数谓词 p 对其返回 true 的元素。
    自定义类型数据

2.1用法

第三个参数是对于if的仿函数或者函数
int c = count_if(v.begin(), v.end(), greaterTen());

例子:该仿函数的作用是判断对象的age是否大于10;

class greaterTen{
	public:
		bool operator() (const Person& p){
			return p.age > 10;
		}
}

3 sort

常常用来进行排序,默认升序,如果要改变排序规则或者对自定义类型数据就需要自己编写规则函数

3.1用法

1.sort(v.begin(), v.end());  内置数据类型,默认升序排序
2.sort(v.begin(), v.end(), myRule()); 自定义类型或者改变排序规

3.2仿函数代码

自定义类型数据, 以age降序进行排序
class myRule{
	public:
		bool operator() (const Person& p1, const Person& p2){
			return p1.age > p2.age;
		}
};

4 random_shuffle

随机打乱容器内部的数据

4.1 用法

random_shuffle( v.begin(), v.end() );

5 merge

作用:将两个有序的序列合并成一个有序的序列放在新的容器上
注意点:合并的两个容器的顺序必须跟排序方法一样,默认使用升序。

5.1用法

merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.vegin());默认升序
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.vegin(), myRule());自定义排序规则

5.2仿函数代码

关于比较的仿函数代码基本一样,都是两个参数进行对比
class myRule{
	public:
		bool operqtor() (const Person& p1, const Person& p2){
			return p1.age > p2.age;  按照age降序的排序规则
		}
}

6 set_intersection

作用:找交集, 从两个有序的容器中找到交集,将交集复制到新的容器中

6.1用法

1.默认的排序规则
set_intersection(v1.begin(). v1.end(), v2.begin(), v2.end(), v3.begin());
2。使用自定义的排序规则, 所有自定义类型的数据都要设计排序规则函数以及重载==
set_intersection(v1.begin(). v1.end(), v2.begin(), v2.end(), v3.begin()myRule());

6.2仿函数以及重载==写法

重载:
bool operator== (const Person& p){
	if( this->age == p.age){
		return ture;
	}else{
		return false;
	}
}

排序规则仿函数,以升序的方式排序
class myRule{
	public:
		bool operator() (const Person& p1, const Person& p2){
			return p1.age < p2.age;
		}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值