c++ - 如何使用 std::transform 进行计算

标签 c++ c++11

我有一个 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';
}

现场演示:http://ideone.com/CUUlvA

关于c++ - 如何使用 std::transform 进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752826/

相关文章:

c++ - 为什么 std::istringstream 只能在此处与构造函数一起使用?

c++ - 为什么不允许在 const 非 volatile 成员函数上消除公共(public)子表达式?

c++ - 使用 std::memcpy 在内存中移动对象

c++ - 做一个不能实例化的类?

c++ - 在 std::for_each 中使用 std::bind

c++ - 将什么传递给 H.264 传输流的 avcodec_decode_video2?

c++ - 在 C++ 中使用 const 的正确方法是什么?

c++ - C++ 中的 For Loop 变量递增位置的区别

c++ - IMU数据中的重力补偿

c++ - std::is_nothrow_move_constructible 是否需要 noexcept 析构函数?