对照msdn函数原型,实现函数功能之transform(教你如何查文档)

本文介绍了如何通过MSDN学习并应用C++ STL中的transform函数。通过两个实例演示了一元和二元操作的具体用法,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能有很大部分人只能看着书本编程,万一书没在身边呢,所以要学会怎么使用MSDN,虽然里面解释大多是英文,只要理解了其中的参数,就迎刃而解了。

这里是直接从MSDN复制过来的,以transform为例:

transform

template<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百度可以下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值