码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-08-19 10:03:39      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

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() 速度慢 非常灵活  两个或者两个区间只能用transform

技术分享

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

using namespace std; 

// 这个参数必须是引用传递,必须要修改
void square(int & elem)
{
	elem = elem * elem;
}

// transfrom 的要求 参数的传递不需要传引用,传值就行  ,但是要有返回值
int square2(int elem)
{
	return elem * elem;
}

int main()
{
	vector<int> a;
	vector<int> b;

	for (int i = 1; i <= 9; i++)
	{
		a.push_back(i);
		b.push_back(i);
	}
	cout << "向量a:" << endl;
	for (vector<int>::iterator iter = a.begin(); iter != a.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	for_each(a.begin(), a.end(), square);// 速度快,传引用

	for (vector<int>::iterator iter = a.begin(); iter != a.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	
	cout << "向量b:" << endl;
	
	for (vector<int>::iterator iter = b.begin(); iter != b.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	transform(b.begin(), b.end(), b.begin(), square2);// 速度慢,传值
	for (vector<int>::iterator iter = b.begin(); iter != b.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	//
	system("pause");
	return 0;
}




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

标签:

原文地址:http://blog.csdn.net/taotaoah/article/details/52247183

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!