STL_算法 for_each 和 transform 比較
C++ Primer 学习中。。
。
简单记录下我的学习过程 (代码为主)
全部容器适用
/**----------------------------------------------------------------------------------
for_each 速度快 不灵活
transform 速度慢 很灵活
----------------------------------------------------------------------------------**/
温故而知新:
/**------http://blog.csdn.net/u010579068------**/
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<iterator>
#include<algorithm>
using namespace std;
/*****************************************
//全部容器适用
/**----------------------------------------------------------------------------------
for_each 速度快 不灵活
transform 速度慢 很灵活
----------------------------------------------------------------------------------**/
/*************************************************************************************
for_each(b,e,p)
transform(b1,e1,b2,op)
transform(b1,e1,b2,b3,op)
*************************************************************************************/
void square(int& elem)//引用传递所以速度快
{
elem*=elem;
}
int square2(int elem)//传參做一次拷贝。返回做一次拷贝
{
return elem*elem;
}
template <typename T>
void Print(const T& V)
{
typename T::const_iterator iter=V.begin();
while(iter != V.end())
{
cout<< *iter++ << " ";
}
cout<<endl;
}
int main()
{
vector<int>a;
vector<int>b;
for(int i=1;i<=9;i++)
{
a.push_back(i);
}
b.insert(b.begin(),a.begin(),a.end());
cout<<"向量a:"<<endl;
Print(a);
for_each(a.begin(),a.end(),square);//參数的传递不须要返回值。引用传递就可以
Print(a);
cout<<endl;
cout<<"向量b:"<<endl;
Print(b);
transform(b.begin(),b.end(),ostream_iterator<int>(cout," "),square2);//參数的传递不须要传引用,须要返回值
cout<<endl;
return 0;
}
/*******
Output:
向量a:
1 2 3 4 5 6 7 8 9
1 4 9 16 25 36 49 64 81
向量b:
1 2 3 4 5 6 7 8 9
1 4 9 16 25 36 49 64 81
*******/
/**----------------------------------------------------------------------------------
for_each 速度快 不灵活
transform 速度慢 很灵活
----------------------------------------------------------------------------------**/
温故而知新: