我有一个 void 函数,它将指向一组点的开始和结束的迭代器作为参数(Setiterator set_begin,Setiterator set_end),一个执行一些计算的查询点和一个指向一组点开始的迭代器(我要在其中添加结果)
void computedist(Setiterator set_begin, Setiterator set_end,
Vector const& query_point, DistanceIterator dist_begin )
{
std::transform(set_begin, set_end, dist_begin, calculation);
}
我已经读过,使用 std::transform 我可以对整组点进行计算,但我不知道应该如何定义要完成的计算,因为我是 C++ 的新手。
在这种情况下,我想计算点到查询点的距离:
我想我的计算应该是这样的
double calc_dist(double query_point, double point_of_the_set){
double dist;
dist = fabs(query_point - point_of_the_set);
return dist;
但我不知道应该如何为函数提供参数,因为我是使用迭代器的新手。
谢谢!
最佳答案
您正在调用的 std::transform
的风格需要调用一个 UnaryOp 函数,它通过 const 引用将 '*iterator' 传递给该函数,并需要 iterator 的返回值: :value_type
它写入 *dest
。
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
using valtype = int;
std::vector<valtype> v1 { 1, 2, 3, 4, 5 };
std::vector<valtype> v2(v1.size());
std::transform(v1.begin(), v1.end(), v2.begin(),
[] (const valtype& in) { return in * 2; });
for (auto& val : v2)
std::cout << val << '\n';
}
关于c++ - 如何使用 std::transform 进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752826/