1. transform() 算法有两种形式:
transform( b1, e1, b2, op )
transform( b1, e1, b2, b3, op )
注意:
如果目标与源相同,transform() 就和for_each() 一样
如果想以某值替换符合规则的元素,应使用replace() 算法
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main( int argc, char** argv )
{
vector<int> vec;
list<int> lst;
for(int i=0; i<=9; ++i)
{
vec.push_back(i);
}
for(int i=0; i<=9; ++i)
{
}
for(vector<int>::iterator itr=vec.begin(); itr!=vec.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
transform(vec.begin(), vec.end(), vec.begin(), negate<int>());
for(vector<int>::iterator itr=vec.begin(); itr!=vec.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
transform(vec.begin(), vec.end(), back_inserter(lst), bind2nd(multiplies<int>(), 10) );
for(list<int>::iterator itr = lst.begin(); itr!=lst.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
transform(lst.begin(), lst.end(), ostream_iterator<int>(cout, " "), negate<int>());
return 0;
}
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main( int argc, char** argv )
{
vector<int> vec;
list<int> lst;
for(int i=1; i<=9; ++i)
{
vec.push_back(i);
}
for(vector<int>::iterator itr=vec.begin(); itr!=vec.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
transform(vec.begin(), vec.end(), vec.begin(), vec.begin(), multiplies<int>());
for(vector<int>::iterator itr=vec.begin(); itr!=vec.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
transform(vec.begin(), vec.end(), vec.rbegin(), back_inserter(lst), plus<int>());
for(list<int>::iterator itr=lst.begin(); itr!=lst.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
transform(vec.begin(), vec.end(), lst.begin(), ostream_iterator<int>(cout, " "), minus<int>());
/*
transform(vec.begin(), vec.end(), vec.begin(), negate<int>());
for(vector<int>::iterator itr=vec.begin(); itr!=vec.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
transform(vec.begin(), vec.end(), back_inserter(lst), bind2nd(multiplies<int>(), 10) );
for(list<int>::iterator itr = lst.begin(); itr!=lst.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
transform(lst.begin(), lst.end(), ostream_iterator<int>(cout, " "), negate<int>());
*/
return 0;
}