c++排序和查找算法的使用,泛型,lambda表达式

文章介绍了C++中algorithm头文件中常用的查找和排序算法,如find和sort,并展示了如何使用谓词(包括函数和lambda表达式)进行定制化操作。此外,还提及了lambda表达式的捕获列表和for_each函数的应用。
摘要由CSDN通过智能技术生成

我们在日常使用和编程比赛中,经常会用到排序算法和查找算法,常用的算法包括查找和排序两类。以下这些算法都在algorithm头文件中定义的泛型操作。

查找
  • find(迭代对象开始位置,迭代对象结束位置, 需要查找的对象)
  • find(迭代对象开始位置,迭代对象结束位置, 谓词)
排序
  • sort(迭代对象开始位置,迭代对象结束位置)默认为升序)
  • sort(迭代对象开始位置,迭代对象结束位置,谓词)
谓词为可调用的对象:例如函数和lambda表达式
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool reverase(int &a, int &b){ // 用于定制化选择的函数 
	return a > b;
}

int main(){
	vector<int> vec = {1,3,2,4};
	
	// for_each可用于选择输出 
	for_each(vec.begin(), vec.end(), [](int num){
		cout << num << endl;
	});
	
	// 查找算法find_if
	int a = 3;
	auto result = find(vec.begin(), vec.end(), 4);
	auto result1 = find_if(vec.begin(), vec.end(), [a](int t){  // 中括号列表里面代表捕获的局部变量 
		return a == t;
	});
	
	cout << (*result)<< endl;
	cout << (*result1)<< endl; 
	
	// 排序算法--定制函数--lambda表达式 
	sort(vec.begin(), vec.end()); // 默认按升序
	sort(vec.begin(), vec.end(), reverase); // 根据谓词逻辑进行排列
	sort(vec.begin(), vec.end(), [](int &a, int &b){  // lambda表达式进行排列 
		return a > b;
	});
	
}

定制操作

我们使用sort的第二版本时,这个版本是重载过的,它接受的第三个参数,这个参数是一个谓词

谓词

谓词是一个可调用的表达式,其返回结果是一个能用作条件的值。标准库的谓词分为两种:

  • 一元谓词:只接受单一的参数
  • 二元谓词:接受两个参数
  • 元素的类型必须能转换为谓词的参数
    以上find_if()和sort的第二个版本有体现
lambda表达式
[可捕获局部变量] (参数列表) -> 返回值类型:通常可以省略,自动推断{
	执行操作的语句块
}
捕获列表的三种方式
  • 值捕获
  • 引用捕获
  • 隐士捕获

注意:捕获列表只用于局部非static变量,lambda可以直接使用局部static变量和在它所在函数之外声明的名字
如果局部变量不用捕获列表的话,在语句块里面直接使用会报错。

for_each
上面使用的for_each()也在算法头文件中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值