您的位置:首页 > 其它

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

2016-08-19 08:37 579 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: