STL算法(14)——for_each()

for_each(b,e,p)// 对容器中的数据进行遍历  b和e是一对儿迭代器 p是一个函数或者是函数对象

使用for_each()算法遍历数据

使用for_each()和函数对象修改数据

使用for_each()返回值

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

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

// 函数对象
template<class T>
class AddValue
{
private:
	T theValue;
public:
	AddValue(const T &v) : theValue(v){};

	void operator()(T &elem)const
	{
		elem += theValue;
	}
};

class MeanValue
{
public:
	long num;
	long sum;
public:
	MeanValue() :num(0), sum(0){}
	// 定义operator 使其成为函数对象
	void operator()(int elem)
	{
		num++;
		sum += elem;
	}

	double value()
	{
		return static_cast<double>(sum) / static_cast<double>(num);
	}
	operator double()	// 类型转换运算符重载
	{
		return static_cast<double>(sum) / static_cast<double>(num);
	}
};

int main()
{
	vector<int> ivec;
	for (int i = 1; i <= 9; i++)
		ivec.push_back(i);
	cout << endl;

	for_each(ivec.begin(), ivec.end(), print);
	cout << endl;
	MeanValue mv = for_each(ivec.begin(), ivec.end(), MeanValue());
	cout << "平均值:" << mv.value() << endl;
	//for_each(ivec.begin(), ivec.end(), AddValue<int>(10));
	for_each(ivec.begin(), ivec.end(), AddValue<int>(*ivec.begin()));

	for_each(ivec.begin(), ivec.end(), print);
	cout << endl;

	double result = for_each(ivec.begin(), ivec.end(), MeanValue());
	cout << "平均值:" << result << endl;

	//
	system("pause");
	return 0;
}
时间: 2024-08-05 12:58:49

STL算法(14)——for_each()的相关文章

STL算法(19)——for_each()和transform()的比较

STL-算法 修改性算法: for_each() generate() copy() generate_n() copy_backwards() replace() transform() replace_if() merge() replace_copy() swap_ranges() replace_copy_if() fill() fill_n() for_each()  速度快 不灵活  只有一个区间的时候用 transform() 速度慢 非常灵活  两个或者两个区间只能用transf

【C/C++学院】0830-兰不达表达式/STL算法-操作数据

兰不达表达式 #include<iostream> #include<vector> #include<algorithm>//算法 lambda表达式,不仅仅适用与array ,也适用于vector void main1() { std::vector<int> myvector; myvector.push_back(11); myvector.push_back(22); myvector.push_back(33); myvector.push_ba

STL 算法[转 ]

STL 算法 STL算法概述 简介: STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorithm>,对于数值算法须包 含<numeric>,<functional>中则定义了一些模板类,用来声明函数对象 注意: 编译器无法检测出所传递的迭代器是一个无效形式的迭代器,当然也无法给出算法函数错误的提示,因为迭代器并不是真实的类别,它只是

STL源码剖析——STL算法stl_algo.h

前言 在前面的博文中剖析了STL的数值算法.基本算法和set集合算法,本文剖析STL其他的算法,例如排序算法.合并算法.查找算法等等.在剖析的时候,会针对函数给出一些例子说明函数的使用.源码出自SGI STL中的<stl_algo.h>文件.注:本文的源码非常多,可能后续博文会对这些算法进行归类分析. STL算法剖析 #ifndef __SGI_STL_INTERNAL_ALGO_H #define __SGI_STL_INTERNAL_ALGO_H #include <stl_heap

STL 算法

STL 算法(本文转自:http://www.cnblogs.com/kzloser/archive/2012/11/02/2751424.html) 阅读目录如下: STL算法概述查找算法堆算法关系算法集合算法排列组合算法排序和通用算法删除和替换算法生成和变异算法算数算法 STL算法概述 简介: STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorithm>

C++标准模板库STL算法与自适应容器(栈和队列)

参考<21天学通C++>第23与第24章节,对STL算法与自适应容器进行介绍. 实际上在前面的STL顺序容器.关联容器进行介绍时或多或少引用到了一些STL算法中的模板函数.而自适应容器是在顺序容器的基础上按照stack.queue的性质进行定制实现的.所以,本篇博文将言简意赅地总结出需要掌握的纲要. 一.STL算法 查找.搜索.删除.计数.排序等都是一些通用算法,STL通过模板函数提供了这些算法,可通过迭代器对容器进行操作.需要包含<algorithm>头文件. 1. find,f

STL算法设计理念 - 函数对象和函数对象当參数和返回值

函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)"的方式使用一个类对象,假设没有上下文,全然能够把它看作一个函数对待. 这是通过重载类的operator()来实现的. "在标准库中.函数对象被广泛地使用以获得弹性".标准库中的非常多算法都能够使用函数对象或者函数来作为自定的回调行为: demo #include <iostr

实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中判断不等于end())、operator[])

遍历一个vector容器有很多种方法,使用起来也是仁者见仁. 通过索引遍历: for (i = 0; i<v.size(); i++) { cout << v[i] << " "; } 迭代器遍历: for (vInt::const_iterator iter = v.begin(); iter != v.end();iter++) { cout << *iter << " "; } 算法遍历: copy(v.b

STL算法(15)——区间的比较

STL算法--区间的比较: equal(b,e,b2) // 用来比较两个容器中的数据是否相等 equal(b,e,b2,p) mismatch(b,e,b2)    // 用来查找两个容器中第一个不相等的数据 查找第一个不匹配算法 mismatch(b,e,b2,p) lexicographical_compare(b,e,b2,e2) //用来比较第一个区间是否比第二个区间小  ,  检查小于算法 lexicographical_compare(b,e,b2,p) #include<iost

STL 算法部分 原创入门教程,要详细资料请百度

STL算法部分 库为  Algorithm 算法库  Functional函数式编程       Numeric  基础性的数值算法 一一:find 查找类有13个函数,详情请百度. 使用方法,s.find(“a”):s就是一个数据类型,比方说set 集合,就是在一个集合中找到第一个和a一样的 字符,然后返回他的迭代器, 迭代器可以大概理解为指针. 用法是  queue<int> : :  iterator it; 因为大多数函数返回的都是it 类型的指针,所有必须认真掌握. 二:排序和通用算