STL算法设计理念—— 一元函数对象和一元谓词

本文深入探讨了C++ STL中的for_each算法及find_if算法的应用,包括如何使用函数对象进行元素处理,以及如何查找满足特定条件的第一个元素。通过具体示例展示了算法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<set>
#include<algorithm>
#include<functional>
using namespace std;
void main02()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(5);

	for_each(v1.begin(), v1.end(), ShowElemt<int>());
	cout << endl;
	for_each(v1.begin(), v1.end(), FunShowElemt2);
	cout << endl;

	ShowElemt<int> show1;

	/*
	template<class _InIt,class _Fn1> inline	_Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
	{	// perform function for each element
		_DEBUG_RANGE(_First, _Last);
		_DEBUG_POINTER(_Func);
		_For_each(_Unchecked(_First), _Unchecked(_Last), _Func);

	return (_STD move(_Func));
	}
	*/
	

	//for_each算法的函数 对象的传递 是元素值传递,不是引用传递
	for_each(v1.begin(), v1.end(), show1);
	show1.printN();

	cout << endl;

	show1 = for_each(v1.begin(), v1.end(), show1);//通过for_each算法的返回值看调用的次数
	show1.printN();
//结论要点:分清楚 stl算法返回的值是迭代器还是谓词(函数对象)是stl算法入门的重要点
}

template<typename T>
class IsDiv
{
public:
	IsDiv(T divisor)
	{
		this->divisor = divisor;
	}

	bool operator()(T&t)
	{
		return(t%divisor == 0);
	}
private:
	T divisor;
};


void main03()
{
	vector<int> v1;
	for (int i = 10; i < 33; i++)
	{
		v1.push_back(i);
	}

	vector<int>::iterator it;
	it = find_if(v1.begin(), v1.end(), IsDiv<int>(4));
	if (it == v1.end())
	{
		cout << "v1中没有被4整除的元素!" << endl;
	}
	else
	{
		cout << "v1中第一个被4整除的元素是:" << *it << endl;
	}



	/*
	template<class _InIt,
	class _Pr> inline
		_InIt find_if(_InIt _First, _InIt _Last, _Pr _Pred)
	{	// find first satisfying _Pred
		_DEBUG_RANGE(_First, _Last);
		_DEBUG_POINTER(_Pred);
		return (_Rechecked(_First,
			_Find_if(_Unchecked(_First), _Unchecked(_Last), _Pred)));
	}
	*/
	//传入的_InIt 是迭代器(v2.begin()),返回的也是_InIt,所以也是迭代器
	

	

}
void main()
{
	main03();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值