#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<functional>
#include<list>
#include<iterator>
using namespace std;
void print(vector<int> &l)
{
for (vector<int>::iterator iter = l.begin(); iter != l.end(); ++iter)
cout << *iter << " ";
cout << endl;
}
void print2(list<int> &l)
{
for (list<int>::iterator iter = l.begin(); iter != l.end(); ++iter)
cout << *iter << " ";
cout << endl;
}
int main()
{
vector<int> ivec;
list<int> ilist;
//第一种形式
for (int i = 1; i <= 9; i++)
ivec.push_back(i);
print(ivec);
transform(ivec.begin(), ivec.end(), ivec.begin(), negate<int>());//所有的数取负操作
print(ivec);//变换到原来的容器
//变换到另外一个容器,复制到list里,复制的过程中做更改,都乘以10
transform(ivec.begin(), ivec.end(), back_inserter(ilist),
bind2nd(multiplies<int>(), 10));//函数适配器,预定义的函数适配器
print2(ilist);
transform(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "), negate<int>());
//第二种形式,把两个结合在一起
cout << endl;
cout << endl;
vector<int> ivec1;
list<int> ilist1;
for (int i = 1; i <= 9; i++)
ivec1.push_back(i);
print(ivec1);
transform(ivec1.begin(), ivec1.end(), ivec1.begin(), ivec1.begin(),multiplies<int>());//自己和自己相乘,乘以的结果放回原来的容器
print(ivec1);
//自己和自己做op变换
/*transform(ivec1.begin(), ivec1.end(), ivec1.begin(), back_inserter(ilist1), plus<int>());
print2(ilist1);*/
cout << endl;
transform(ivec1.begin(), ivec1.end(), ivec1.rbegin(), back_inserter(ilist1), plus<int>());
print2(ilist1);
transform(ivec1.begin(), ivec1.end(),ilist1.begin(),ostream_iterator<int>(cout," "),minus<int>());
system("pause");
return 0;
}
算法transform
最新推荐文章于 2024-01-14 20:28:34 发布