【C++ STL学习之六】STL算法之for_each

for_each()函数将调用者提供的操作施加于每一个元素身上。它既可以是非变动性算法,也可以说是变动性算法。

template <class InputIterator, class Function>
   Function for_each (InputIterator first, InputIterator last, Function f);

将函数f施加于区间[first,last)的每一个元素身上。其实现:

template<class InputIterator, class Function>
  Function for_each(InputIterator first, InputIterator last, Function f)
  {
    for ( ; first!=last; ++first ) f(*first);
    return f;
  }
它返回f已在算法内部变动过的一个副本。
f可以是普通函数,也可是仿函数。它的任何返回值都将被忽略。


程序实例:

下面的例子实现了两个功能:

一是使用普通函数print()打印所以元素;而是使用自定义的仿函数来改变每个元素:将每个元素乘以3.

main.cpp:

#include "algostuff.h"

using namespace std;

void print(int elem)
{
	cout << elem << " ";
}

//define a functor
//multiply every element with the value initialized
template <class T>
class MultiplyValue{
private:
	T value;
public:
	MultiplyValue(const T val):value(val){}

	//the function call
	void operator()(T &elem)
	{
		elem *= value;
	}
};

int main()
{
	vector<int> intVec;
	INSERT_ELEMENTS(intVec,1,9);

	cout << "elements : " << endl;
	for_each(intVec.begin(),intVec.end(),print);
	cout << endl << endl;

	for_each(intVec.begin(),intVec.end(),MultiplyValue<int>(3));
	PRINT_ELEMNTS(intVec,"after multiply : ");
	cout << endl;
}
algostuff.h:
#ifndef ALGOSTUFF_H
#define ALGOSTUFF_H

#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <set>
#include <map>
#include <string>
#include <algorithm>
#include <functional>
#include <numeric>

//print all the elements
template <class T>
inline void PRINT_ELEMNTS(const T &col,const char *optcstr = " ")
{
	typename T::const_iterator pos;
	cout << optcstr;
	for(pos = col.begin();pos != col.end();++pos)
		cout << *pos << " ";
	cout << endl;
}

//insert values from first to last into the collection
template <class T>
inline void INSERT_ELEMENTS(T &col,int first,int last)
{
	for(int i = first;i <= last;++i)
		col.insert(col.end(),i);
}

#endif
运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有昵称阿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值