STL之transform()算法

transform函数是C++标准库中用于元素转换的算法,它可以对输入序列的元素应用特定操作并将其结果存储在目标序列中。文章展示了transform如何用于改变序列元素(如取反、乘以常数)、结合两个序列的元素(如相加、相乘),并强调了需要确保目标序列有足够的空间。示例代码中使用了标准库的函数对象和bind2nd进行操作。

算法transform()提供两种能力

1.第一形式有4个参数。把源区间的元素转换到目标区间(转换的意思包含了复制和修改)

2.第二形式有5个参数,将前两个源序列中的元素合并,并将结果写入目标区间

转换元素

OutputIterator transform(InputIterator sourceBeg,InputIterator sourceEnd,
                        OutputIterator destBeg,UnaryFunc op)
  • 针对源区间[sourceBeg,sourceEnd)中的每一个元素调用:op(elem),并将结果写到以destBeg起始的目标区间内
  • 返回目标区间内“最后一个被转换元素”的下一位置,也就是第一个未被覆盖的元素的位置
  • 调用者必须确保目标区间有足够空间,否则就必须使用插入型迭代器
  • sourceBeg与destBeg可以相同,所以可以使用这个算法来变动某一序列内的元素
#include "algostuff.h"
using namespace std;
int main()
{
	vector<int> col1;
	list<int> col2;
	INSERT_ELEMENTS(col1, 1, 9);
	PRINT_ELEMENTS(col1, "col1: ");

	//negate all elements in col1
	transform(col1.begin(), col1.end(), col1.begin(), negate<int>());
	PRINT_ELEMENTS(col1, "negate col1: ");

	//transform elements of col1 into col2 with 10 times their value
	transform(col1.be
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值