对照msdn函数原型,实现函数功能之transform(教你如何查文档)
可能有很大部分人只能看着书本编程,万一书没在身边呢,所以要学会怎么使用MSDN,虽然里面解释大多是英文,只要理解了其中的参数,就迎刃而解了。
这里是直接从MSDN复制过来的,以transform为例:
transformtemplate<class InIt, class OutIt, class Unop> OutIt transform(InIt first, InIt last, OutIt x, Unop uop);template<class InIt1, class InIt2, class OutIt, class Binop> OutIt transform(InIt1 first1, InIt1 last1, InIt2 first2, OutIt x, Binop bop);
The first template function evaluates *(x + N) = uop(*(first + N))
once for eachN
in the range[0, last - first)
. It then returnsx + (last - first)
.The call uop(*(first + N))
must not alter*(first + N)
.
The second template function evaluates *(x + N) = bop(*(first1 + N), *(first2 + N))
once for eachN
in the range[0, last1 - first1)
. It then returnsx + (last1 - first1)
.The call bop(*(first1 + N), *(first2 + N))
must not alter either*(first1 + N)
or*(first2 + N)
.
1首先我们看到两个模板函数,关于这两个模板函数的解释,下面都有英文解释,英文不太懂的,用在线翻译或其他翻译工具。其实,也不用十分懂,关键单词知道意思就行了。
2解释下参数的意思:
InIt表示输入参数 OutIt表示输出参数,Unop表示一元函数,Binop表示二元函数
InIt一般用数组或指针又或者是迭代器,OutIt用来装载结果的迭代器(或数组,指针)首址。
3第一个函数跟第二个函数最大的不同是,参数不同,The calluop(*(first + N))
must not alter*(first + N)
.不允许改变first迭代器所指容器的值。The callbop(*(first1 + N), *(first2 + N))
must not alter either*(first1 + N)
or*(first2 + N)
.不允许改变first1和first2迭代器所指容器的值。所以,第一函数的值只能有first2迭代器所指的容器去接收值,而第二个函数只能用第三方迭代器所指的容器去接收值。
4看具体代码:
第一个函数的代码:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int chenger(int a){
return 2*a;
}
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
vector<int>vv(10);
transform(v.begin(),v.end(),vv.begin(),chenger);
for(vector<int>::iterator iter=vv.begin();iter!=vv.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
system("pause");
return 0;
}
第二函数的代码:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int gaibian(int a,int b){
return a+b;
}
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
int b[]={100,200,300,400,500,600,700,800,900,1000};
vector<int>v(a,a+10);
vector<int>vv(b,b+10);
vector<int>vvv(10);
transform(v.begin(),v.end(),vv.begin(),vvv.begin(),gaibian);
for(vector<int>::iterator iter=vvv.begin();iter!=vvv.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
system("pause");
return 0;
}
赶快去试试别的函数吧,MSDN2001 OTC百度可以下载。