首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >make_transform_iterator作为推力的第二个参数的意义是什么:减少算法?

make_transform_iterator作为推力的第二个参数的意义是什么:减少算法?
EN

Stack Overflow用户
提问于 2016-06-17 14:15:13
回答 1查看 451关注 0票数 1

守则如下:

代码语言:javascript
复制
thrust::reduce(thrust::make_transform_iterator(v.begin(), square()),
                  thrust::make_transform_iterator(v.end(),   square()));

摘自transform_iterator示例这里。具体来说,使用以下内容作为第二个迭代器不是多余的吗?

代码语言:javascript
复制
thrust::make_transform_iterator(v.end(), square())

为什么不直接用下面这些来代替呢?

代码语言:javascript
复制
 thrust::reduce(thrust::make_transform_iterator(v.begin(), square()),
                  v.end());

我想在这个特殊的例子中,由于thrust::make_transform_iterator(v.begin(), square())不会产生一个与v大小不同的迭代器,所以我更新的代码将执行与原始代码相同的操作,对吗?

编辑

我唯一的猜测是,这是为了确保两个迭代器都是同一类型的?我所发现的对此的怀疑是以下文档中的文本:“转换函子(即square_root和square)继承自thrust::unary_function,从thrust::unary_function继承确保函子是有效的AdaptableUnaryFunction,并提供了所有必要的typedef声明。”不过,我认为这具体指的是函子本身。

更新

请参阅的评论。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-21 18:44:02

这里的迭代器用于标记特定序列的开始和结束。在这里,v.end()不标记转换迭代器的序列结束:

代码语言:javascript
复制
thrust::reduce(thrust::make_transform_iterator(v.begin(), square()),
              v.end());

标志着开始。

这里的一些其他构造可能具有更好的外观(在旁观者的眼里是美丽的),例如:

代码语言:javascript
复制
auto my_iter = thrust::make_transform_iterator(v.begin(), square());
thrust::reduce(my_iter, my_iter+v.size());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37883853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档