shake_transform_iterator作为推力中的第二个参数的重点是什么:: dredion算法

What is the point of the make_transform_iterator as the second parameter in thrust::reduce algorithm?

本文关键字:参数 是什么 dredion 第二个 算法 iterator transform shake      更新时间:2023-10-16

代码如下:

thrust::reduce(thrust::make_transform_iterator(v.begin(), square()),
                  thrust::make_transform_iterator(v.end(),   square()));

在此处取自Transform_iterator示例。具体来说,将以下用作第二个迭代器吗?

是多余的吗?
thrust::make_transform_iterator(v.end(), square())

为什么不在其位置使用以下内容?

 thrust::reduce(thrust::make_transform_iterator(v.begin(), square()),
                  v.end());

我想在这个特定示例中,由于thrust::make_transform_iterator(v.begin(), square())不会产生与v不同的迭代器,所以我的更新代码与原始代码相同,这是正确的吗?

编辑
我唯一的猜测是确保两个迭代器都是相同类型的?我发现的所有确认我对此的怀疑是该文档中的以下文本"转换函数(即Square_root and Square)从throust :: Unary_function继承。必要的Typedef声明。"虽然,我认为这特别是指函子本身。

更新
请参阅罗伯特·克罗维尔(Robert Crovella)的答案评论。

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

thrust::reduce(thrust::make_transform_iterator(v.begin(), square()),
              v.end());

标志着。

的开始

这里的其他一些结构可能具有更好的外观(在情人眼中是美女),例如:

auto my_iter = thrust::make_transform_iterator(v.begin(), square());
thrust::reduce(my_iter, my_iter+v.size());